"Virtual Hosting" en Apache

Que es "Virtual Hosting" ?

Antes de entrar en detalle sobre "Virtual Hosting" es conveniente aclarar que es "Virtual Hositing".

Como su nombre lo implica se trata de "Hosts" virtuales, pero que significa esta virtualidad ? , en el caso de Apache es la facilidad de administrar más de un sitio de una manera sencilla y eficiente en un solo "Host"(Computadora Física) ,ejemplo:

En la configuración de httpd.conf en ServerName se indica el nombre del sitio que administra Apache, si después pretende administrar el contenido para: xml.desarrollo-osmosis.com y clientes.com esto no necesariamente implica que debe instalar Apache dos veces más, ni tampoco que debe instalar dos "Hosts"(Computadoras Físicas) para administrar estos sitios nuevos; lo anterior se resuelve fácilmente a través de "Virtual Hosting"

NOTA: Existe otro caso que es denominado "Virutal Hosting" el cual se da con un sitio de "alto trafico", esto tipo de "Virtual Hosting" se da cuando un "Host"("Computadora Física") no es capaz de absorber la carga de un sitio por si sola, a diferencia de la solución con Apache este tipo de situación se soluciona Múltiples Direcciones IP y Round Robin DNS y "Load Balancers" .

Módulo Proxy

El primer paso es verificar que Apache sea capaz de utilizar "Virtual Hosting", para esto se requiere que el módulo proxy este habilitado, si ejecuta el comando httpd -l debe aparecer una linea con mod_proxy.c, de no ser así , entonces debe instalar este módulo; en Módulos de Apache se describe el procedimiento.

Configuración DNS

Esta configuración es parte critica de cualquier "Virtual Hosting", de otra manera no sería posible atender las requisiciones de los diversos sitios en Internet, vea también la Guia de DNS .

Sin embargo, si solo requiere realizarlo en un ambiente local es posible modificar /etc/hosts e incluirle los distintos sitios:

127.0.0.1 www.osmosislatina.com
127.0.0.1 www.filantropia.org
127.0.0.1 www.burocratas.gob

Lo anterior permite al Resolver del "Host" identificar que cualquier solicitud para www.osmosislatina.com, www.filantropia.org, www.burocratas.gob sea enviada a la maquina local (127.0.0.1).

httpd.conf

La configuración del archivo /etc/hosts o DNS no serviría de mucho si al llegar la requisición al "Host" no supiera que hacer con estas, para esto es necesario realizar las modificaciones al archivo principal de Apache httpd.conf.

En una instalación de Apache con un solo sitio se emplea el parámetro ServerName para indicar el sitio al cual se esta administrando información, sin embargo , cuando se requiere administrar varios sitios se utiliza el parámetro VirutalHost.

NameVirtualHost , VirtualHost

El primer paso para configurar "Virtual Hosting" es eliminar (comentar) el parámetro ServerName y substituir lo por NameVirtualHost.

#ServerName www.osmosislatina.com
Port 80 
NameVirtualHost 127.0.0.1

Posteriormente es necesario definir las respectivas secciones para cada VirtualHost

<Virtual Host 127.0.0.1>
ServerName www.osmosislatina.com 
DocumentRoot /www/osmosislatina/
ErrorLog /www/osmosislatina/log_errores
</Virtual Host>

<Virtual Host 127.0.0.1>
ServerName www.filantropia.org 
DocumentRoot /www/beneficio/
DirectoryIndex ayuda.htm, index.htm
</Virtual Host>


<Virtual Host 127.0.0.1>
ServerName www.burocratas.gob
DocumentRoot /www/gobierno/
ScriptAlias /cgi-bin/ "/usr/local/impuestos/"
</Virtual Host>

El primer detalle de cada "Virtual Host" es que sus definiciones se encuentran delimitadas por <Virtual Host 127.0.0.1> y </Virtual Host> (este es un ejemplo básico del uso de XML ); el nodo IP 127.0.0.1 debe coincidir precisamente con aquel definido en NameVirtualHost.

Notará que dentro de cada definición se encuentran parámetros que ya se mencionaron en la configuración inicial de Apache , y son estos parámetros los que rigen el comportamiento de cada sitio.El primer "Virtual Host" indica que toda solicitud para www.osmosislatina.com debe ser respondida con documentación del directorio /www/osmosislatina; el segundo "Virtual Host" con documentación del directorio /www/beneficio y www.burocratas.gob del directorio /www/gobierno

Y los demás valores ?

Otro detalle de la configuración anterior es que dentro de cada "Virtual Host" no se declaran los mismos parámetros, el "Virtual Host" www.osmosislatina.com define que sus errores deben ser enviados a /www/osmosislatina/log_errores mientras www.filantropia.org define el parámetro DirectoryIndex y los demás "Virtual Hosts" no.

De donde toman los valores no definidos los "Virtual Hosts" ? , De los parámetros definidos por fuera de cada sección, esto es, se asume que si dentro de cada sección de "Virtual Host" no se define un parámetro especifico se toma el valor global definido en httpd.conf

Si el valor ErrorLog(global) tiene el valor de /usr/apache/errors_log todo error de cualquier sitio será enviado a esta sección siempre y cuando no haya sido definido dentro de "VirtualHost". El mismo caso seria para DirectoryIndex,CustomLog y los demás parámetros disponibles en httpd.conf.

Finalmente en la configuración se puede observar que nuestros amigos de gobierno en www.burocratas.gob requieren tener su propio directorio de "Scripts"(Programas), mientras los demás sitios pueden compartir aquel valor definido globalmente en ScriptAlias.