Los hosts virtuales de Apache son una función que le permite alojar varios sitios web independientes desde una sola 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 utilizando el <VirtualHost>
directiva en los archivos de configuración de Apache. Por lo general, se almacenan en el archivo. sites-available
directorio dentro de la ruta de instalación de Apache. En los sistemas Debian, esto suele ser /etc/apache2
; otras distribuciones pueden usar /etc/httpd
.
Asumiremos que ya tiene Apache en funcionamiento. Crearemos dos hosts virtuales separados, a.example.com
es b.example.com
. No hay límite para la cantidad de hosts virtuales que puede usar; si necesita una docena de sitios en un servidor, Apache lo hará.
Configuración del sitio
Cada sitio necesita su propio directorio de sistema de archivos. Colocará archivos de sitios web, como HTML, CSS y JavaScript, dentro de este directorio. Se llama DocumentRoot
de Apache, ya 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
normalmente 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 usuario y establezca los permisos adecuados. Esto permitirá que Apache lea los archivos mientras le otorga acceso de escritura para que pueda agregar su propio 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 sitio web en directorios. Usaremos dos simples index.html
Archivo:
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>
Configuración de Apache
Ahora está listo para configurar sus hosts virtuales. Cree un nuevo archivo de host virtual para cada uno de los sitios. No importa cómo se llame el archivo; por convención, suele ser el nombre de host de su sitio.
Como mínimo, cada host virtual debe declarar dos propiedades:
ServerName
- El nombre de host (dominio) desde el que se servirá el sitio.DocumentRoot
- La ubicación del sistema de archivos que se utilizará para este host virtual.
A continuación, se muestra un ejemplo de configuración 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 funcionen! La *:80
significa que Apache considerará el uso de este host virtual para cualquier solicitud que llegue al puerto 80. Más tarde serán eliminados por ServerName
declaraciones.
Habilitar hosts virtuales
Agregar un host virtual a sites-available
solo hazlo disponible pero no activo. Tienes que habilitar manualmente cada sitio que quieras usar. Las configuraciones de host virtual que se habilitarán deben estar vinculadas simbólicamente /etc/apache2/sites-enabled
(o /etc/httpd/sites-enabled
).
En los sistemas Debian, puede utilizar el a2ensite
comando para simplificar este paso:
a2ensite a.example.com a2ensite b.example.com
En otras distribuciones, use la extensión ln
comando para crear manualmente un enlace simbólico.
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
Finalmente, reinicie Apache para aplicar la nueva configuración. Los cambios en el host virtual requieren que se reinicie el servidor después de agregarlos a sites-enabled
.
sudo apache2ctl restart
Ahora debería poder ver a Apache sirviendo sus dos sitios diferentes. Si no tiene resolución DNS en su servidor, puede modificar su sistema /etc/hosts
archivo para probar la 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 nuevamente en su sistema. Ahora podrá visitarlos en su navegador para ver las dos páginas de host virtual diferentes.
Alias del sitio
Si quieres 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 es Host
el encabezado coincide ServerAlias
o el 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 deber usar ServerAlias
para definir múltiples dominios - repitiendo ServerName
es posible, pero sobrescribirá los usos anteriores.
Otras opciones de configuración
Muchas de las opciones de configuración del servidor de Apache se pueden utilizar con hosts virtuales. Anularán la configuración global del servidor cuando Apache maneje una solicitud utilizando 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 otras configuraciones. my-index.html
se sirve de forma predeterminada en lugar de index.html
y se utilizan rutas de registro personalizadas. Además, se aplican configuraciones adicionales a la raíz del documento en sí, utilizando el archivo Directory
bloquear. .htaccess
se permiten anulaciones (AllowOverride All
) y las páginas de listado de directorios predeterminadas de Apache están deshabilitadas (Options -Indexes
).
Host de dirección IP
Apache también admite hosts basados en IP además 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 corporativa interna e Internet pública. Es posible servir un sitio diferente dependiendo de 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 realizadas a a.example.com
a través de la interfaz IP 192.168.0.1
recibiría contenido que no sea el enviado a través de 172.17.0.1
. Además, los usuarios de esta última IP podrían iniciar sesión b.example.com
. Este sitio no está expuesto a usuarios que se conectan a través de 192.168.0.1
.
Este enfoque le permite utilizar un servidor para su intranet corporativa y sitio web público. Asociar sitios internos a la IP LAN de su servidor; ejecutar hosts públicos contra su dirección WAN.
Partido de anfitrión virtual
Rutina de resolución de host virtual Apache está bien documentado y bastante simple.
En general, Apache intenta hacer coincidir el archivo Host
solicitud de encabezado contra un archivo ServerName
o ServerAlias
en una configuración de host virtual. Si hay varias coincidencias, Apache usará la extensión primero correspondiente al host virtual encontrado.
Los hosts virtuales se ordenan por nombre de archivo. Si usted necesitar un sitio que se comparará antes que otro, cambia 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 no será necesario: si todos sus sitios tienen dominios únicos, nunca debería encontrar un conflicto.
Conclusión
Los hosts virtuales Apache le permiten dividir su configuración de sitios múltiples en archivos de definición independientes. Puede habilitar y deshabilitar cada sitio de forma independiente vinculándolo a sites-enabled
.
Mucho 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.
Deja una respuesta