Con Apache Virtual Host, puede ejecutar varios sitios web en el mismo servidor.
Por ejemplo, puedo ejecutar tanto thegeekstuff.com como top5freeware.com en un solo servidor físico que tiene un servidor web Apache ejecutándose.
Fig:Apache Virtual Host (Múltiples sitios web, un Apache)
Hay dos tipos de configuraciones de host virtual de Apache:1) Host virtual basado en IP y 2) Host virtual basado en nombre. Se recomienda un host virtual basado en nombres para la mayoría de los escenarios.
Host virtual basado en IP
En esta configuración, cuando apunta dos sitios web (con direcciones IP diferentes) al servidor que ejecuta Apache, ese servidor físico debe tener dos direcciones IP diferentes configuradas.
Esto significa que el servidor debe tener dos tarjetas ethernet, cada una de ellas configurada con la dirección IP del sitio web correspondiente que servirá el host virtual de Apache. Por lo tanto, esto no es práctico para la mayoría de los aspectos, y no debería usarlo.
En el siguiente ejemplo, el servidor contiene dos tarjetas NIC, una está configurada con la dirección IP 192.168.101.1 para thegeekstuff.com, otra está configurada con 192.168.102.1 para top5freeware.com. Ambas direcciones IP son atendidas por un único servidor web Apache que se ejecuta en ese servidor utilizando un host virtual basado en IP.
Fig:Host virtual basado en IP de Apache
Host virtual basado en nombre
En esta configuración, cuando el servidor web Apache recibe una solicitud, busca el nombre de host en el encabezado HTTP y, según el nombre de host, sirve diferentes sitios web. Esto es muy fácil, ya que solo necesita una dirección IP en ese servidor físico; pero actualiza el DNS con varios nombres de sitios web que apuntan a la misma dirección IP. A efectos prácticos, solo utilizará la configuración de host virtual basada en nombres.
En el siguiente ejemplo, el servidor contiene solo una tarjeta NIC, que está configurada con la dirección IP 192.168.101.1. La entrada DNS para el sitio web thegeekstuff.com y top5freeware.com apunta a la dirección IP 192.168.101.1. Cuando Apache recibe una solicitud, busca la entrada del nombre de host en el encabezado HTTP y sirve el sitio web correspondiente.
Fig:Host virtual basado en el nombre de Apache
1. Descomente httpd-vhosts.conf en httpd.conf
Si instaló Apache 2 desde la fuente, de forma predeterminada, la siguiente línea se comentará en el archivo httpd.conf. Descomente esta línea.
# vi /usr/local/apache2/conf/httpd.conf Include conf/extra/httpd-vhosts.conf
2. Configurar hosts virtuales
Modifique httpd-vhosts.conf como se muestra a continuación para configurar la configuración de host virtual basada en nombre para dos hosts.
- NameVirtualHost *:80:indica que todos los hosts virtuales basados en nombres escucharán en el puerto predeterminado 80
- En el siguiente ejemplo, estamos configurando un host virtual para thegeekstuff.com y top5freeware.com escuchando en el mismo puerto 80. Por lo tanto, habrá dos
- Cuando vaya a thegeekstuff.com, los archivos bajo /usr/local/apache2/docs/thegeekstuff serán servidos por Apache; y access_log y error_log para este sitio estarán en /usr/local/apache2/logs/thegeekstuff
# vi /usr/local/apache2/conf/extra/httpd-vhosts.conf NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/usr/local/apache2/docs/thegeekstuff" ServerName thegeekstuff.com ServerAlias www.thegeekstuff.com ErrorLog "logs/thegeekstuff/error_log" CustomLog "logs/thegeekstuff/access_log" common </VirtualHost> <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/usr/local/apache2/docs/top5freeware" ServerName top5freeware.com ServerAlias www.top5freeware.com ErrorLog "logs/top5freeware/error_log" CustomLog "logs/top5freeware/access_log" common </VirtualHost>
3. Comprobar la sintaxis de configuración de VirtualHost
Verifique la sintaxis de configuración virtual usando "httpd -S" como se muestra a continuación. Cuando todo está configurado correctamente, simplemente muestra "Syntax OK".
# /usr/local/apache2/bin/httpd -S VirtualHost configuration: Syntax OK
Cuando algo no está configurado correctamente, mostrará un mensaje de advertencia, incluido el mensaje "directorio no sale", como se muestra a continuación.
# /usr/local/apache2/bin/httpd -S Warning: DocumentRoot [/usr/local/apache2/docs/top5freeware] does not exist Warning: ErrorLog [/usr/local/apache2/logs/thegeekstuff] does not exist Syntax OK
4. Reinicie Apache y pruebe
# /usr/local/apache2/bin/apachectl restart
Ahora, cuando vaya a thegeekstuff.com (o www.thegeekstuff.com), apache entregará los archivos del directorio /usr/local/apache2/docs/thegeekstuff.
Cuando vaya a top5freeware.com (o www.top5freeware.com), el mismo apache que se ejecuta en el mismo servidor servirá los archivos del directorio /usr/local/apache2/docs/top5freeware.
Solo para reiterar, para que el host virtual basado en nombre funcione correctamente, la entrada de DNS para ambos sitios web debe apuntar a la misma dirección IP externa del servidor físico donde se ejecuta el servidor web Apache.