Cómo alojar varios sitios web con un servidor Apache

Contenidos

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.htmly 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.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.