Los hosts virtuales de Apache son una función que le posibilita alojar varios sitios web independientes desde una instalación de Apache. Cada sitio tiene su propio directorio de sistema de archivos y nombre de dominio. Puede ofrecer diferentes sitios a diferentes visitantes según el dominio que estén usando.
Los hosts virtuales se crean usando el <VirtualHost>
directiva en los archivos de configuración de Apache. Regularmente se almacenan en el sites-available
directorio dentro de la ubicación de instalación de Apache. En los sistemas Debian, esto suele ser /etc/apache2
; otras distribuciones pueden utilizar /etc/httpd
.
Asumiremos que ya tiene Apache en funcionamiento. Crearemos dos hosts virtuales separados, a.example.com
y b.example.com
. No hay límite para la cantidad de hosts virtuales que puede utilizar; si necesita una docena de sitios en un servidor, Apache lo hará.
RELACIONADO: Cómo hallar la carpeta de configuración de Apache
Configurar los sitios
Cada sitio necesita su propio directorio de sistema de archivos. Colocará los archivos del portal web, como HTML, CSS y JavaScript, dentro de este directorio. Se llama el DocumentRoot
por Apache, puesto que es la raíz desde la que se sirven los documentos.
Puede ubicar sus sitios en cualquier lugar de su sistema. A menudo verá hosts virtuales almacenados en /var/www
, con cada sitio obteniendo su propia carpeta:
sudo mkdir -p /var/www/a.example.com sudo mkdir -p /var/www/b.example.com
/var/www
regularmente es propiedad de root
, entonces estamos usando sudo
para crear los subdirectorios. A continuación, cambie la propiedad de las raíces del documento a su propio usuario y establezca los permisos adecuados. Esto permitirá que Apache lea archivos mientras le da acceso de escritura para que pueda agregar su contenido.
sudo chown -R $USER:$USER /var/www/a.example.com sudo chown -R $USER:$USER /var/www/b.example.com sudo chmod -R 755 /var/www
Copie los archivos de su portal web en los directorios. Usaremos dos simples index.html
archivos:
a.example.com/index.html
<html> <body> <h1>a.example.com</h1> </body> </html>
b.example.com/index.html
<html> <body> <h1>b.example.com</h1> </body> </html>
Configurando Apache
Ahora está listo para configurar sus hosts virtuales. Cree un nuevo archivo de host virtual para cada uno de los sitios. No importa el nombre del archivo; por convención, de forma general coincide con el nombre de host de su sitio.
Mínimamente, cada host virtual debe declarar dos propiedades:
ServerName
– El nombre de host (dominio) desde el que se será útil el sitio.DocumentRoot
– La ubicación del sistema de archivos que se utilizará para este host virtual.
Aquí hay una configuración de ejemplo para nuestros dos sitios:
/etc/apache2/sites-available/a.example.com.conf
<VirtualHost *:80> ServerName a.example.com DocumentRoot /var/www/a.example.com </VirtualHost>
/etc/apache2/sites-available/b.example.com.conf
<VirtualHost *:80> ServerName b.example.com DocumentRoot /var/www/b.example.com </VirtualHost>
¡Esta configuración básica es suficiente para que los dos sitios estén activos! los *:80
significa que Apache considerará el uso de este host virtual para cualquier solicitud que llegue al puerto 80. ServerName
declaraciones.
Habilitación de hosts virtuales
Agregar un host virtual a sites-available
lo hace disponible pero no activo. Debe habilitar manualmente cada sitio que desee usar. Las configuraciones de host virtual para habilitar deben estar vinculadas simbólicamente a /etc/apache2/sites-enabled
(o /etc/httpd/sites-enabled
).
En los sistemas Debian, puede usar el a2ensite
comando para simplificar este paso:
a2ensite a.example.com a2ensite b.example.com
En otras distribuciones, use el ln
comando para crear un link simbólico manualmente.
sudo ln -s /etc/httpd/sites-available/a.example.com.conf /etc/httpd/sites-enabled/a.example.com.conf sudo ln -s /etc/httpd/sites-available/a.example.com.conf /etc/httpd/sites-enabled/b.example.com.conf
Por último, reinicie Apache para aplicar su nueva configuración. Los cambios de host virtual requieren un reinicio del servidor después de haberlos agregado a sites-enabled
.
sudo apache2ctl restart
Ahora debería poder ver a Apache sirviendo sus dos sitios diferentes. Si no tiene DNS resolviéndose en su servidor, puede modificar el /etc/hosts
archivo para probar su configuración.
Agregue las siguientes líneas a /etc/hosts
:
127.0.0.1 a.example.com 127.0.0.1 b.example.com
Esto obligará a ambos dominios a resolverse en su propio sistema. Ahora podrá visitarlos en su navegador para ver las dos páginas de host virtual diferentes.
Alias del sitio
Si pretendes servir el mismo sitio en varios dominios, utilice el ServerAlias
directiva en su host virtual. Cada alias se considerará cuando Apache compare su host virtual con las solicitudes entrantes. El host virtual se utilizará si la solicitud Host
encabezado coincide con un ServerAlias
o la ServerName
.
<VirtualHost *:80> ServerName a.example.com ServerAlias example.com ServerAlias www.example.com DocumentRoot /var/www/a.example.com </VirtualHost>
Este ejemplo serviría a
sitio en tres dominios, sin tener que repetir ningún detalle de configuración. usted debe utilizar ServerAlias
para establecer múltiples dominios – repitiendo ServerName
es factible pero anulará los usos anteriores.
Otras opciones de configuración
Muchas de las alternativas de configuración del servidor de Apache se pueden usar con hosts virtuales. Anularán la configuración global del servidor cuando Apache maneje una solicitud usando el host virtual.
<VirtualHost *:80> ServerName a.example.com DocumentRoot /var/www/a.example.com DirectoryIndex my-index.html <Directory /var/www/a.example.com> AllowOverride All Options -Indexes Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Este host virtual aplica muchas más configuraciones. my-index.html
se sirve de forma predeterminada, en lugar de index.html
y se usan ubicaciones de registro personalizadas. Al mismo tiempo, se aplican configuraciones adicionales a la raíz del documento en sí, usando el Directory
cuadra. .htaccess
se posibilitan anulaciones (AllowOverride All
) y las páginas de listado de directorios predeterminadas de Apache están deshabilitadas (Options -Indexes
).
Hosts de direcciones IP
Apache además admite hosts basados en IP al mismo tiempo de los hosts basados en nombres que hemos visto hasta ahora. Los hosts basados en IP son ideales cuando su servidor tiene múltiples interfaces de red, como una red interna de la compañía y la Internet pública. Puede servir un sitio distinto según la interfaz de red utilizada.
<VirtualHost 172.17.0.1> ServerName a.example.com DocumentRoot /var/www/a </VirtualHost> <VirtualHost 172.17.0.1> ServerName b.example.com DocumentRoot /var/www/b </VirtualHost> <VirtualHost 192.168.0.1> ServerName a.example.com DocumentRoot /var/www/a2 </VirtualHost
En este ejemplo, las solicitudes hechas a a.example.com
a través de la interfaz con IP 192.168.0.1
recibiría contenido distinto a los enviados a través de 172.17.0.1
. Al mismo tiempo, los usuarios de esta última IP podrían tener acceso b.example.com
. Este sitio no está expuesto a usuarios que se conectan a través de 192.168.0.1
.
Este enfoque le posibilita usar un servidor para su intranet corporativa y portal web público. Vincule los sitios internos a la IP LAN de su servidor; ejecutar los hosts públicos contra su dirección WAN.
Coincidencia de host virtual
Rutina de resolución de host virtual de Apache está bien documentado y bastante sencillo.
En general, Apache intenta igualar el Host
encabezado de solicitud contra un ServerName
o ServerAlias
campo en una configuración de host virtual. Si hay varias coincidencias, Apache usará el primero coincidente con el host virtual que encontró.
Los hosts virtuales se ordenan por nombre de archivo. Si tu necesitar un sitio para que coincida antes que otro, cambie el nombre de su archivo de configuración para que se clasifique antes que el sitio de destino. Puede agregar un prefijo numérico como 000-a.example.com.conf
. La mayoría de las veces, esto será innecesario: si todos sus sitios disponen dominios únicos, nunca debería hallar un conflicto.
Conclusión
Los hosts virtuales Apache le posibilitan dividir la configuración de varios sitios en archivos de definición autónomos. Puede habilitar y deshabilitar cada sitio de forma independiente vinculándolo a sites-enabled
.
Muchos opciones de configuración están disponibles para hosts virtuales. Puede anular algunas configuraciones del servidor Apache por host, por lo que tiene un control total sobre la configuración de cada sitio virtualizado.