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" . |
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.
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).
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
.
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
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
.