En mi última publicación, expliqué cómo configurar un servidor web Apache para un solo sitio web. Resultó ser muy fácil. En esta publicación, le mostraré cómo servir múltiples sitios web usando una sola instancia de Apache.
Nota:Escribí este artículo en una máquina virtual usando Fedora 27 con Apache 2.4.29. Si tiene otra distribución o versión de Fedora, los comandos que usará y las ubicaciones y el contenido de los archivos de configuración pueden ser diferentes.
Como mencioné en mi artículo anterior, todos los archivos de configuración para Apache se encuentran en /etc/httpd/conf
y /etc/httpd/conf.d
. Los datos de los sitios web se encuentran en /var/www
por defecto. Con varios sitios web, deberá proporcionar varias ubicaciones, una para cada sitio que aloje.
Alojamiento virtual basado en nombres
Con el alojamiento virtual basado en nombres, puede usar una sola dirección IP para varios sitios web. Los servidores web modernos, incluido Apache, usan el hostname
parte de la URL especificada para determinar qué servidor web virtual responde a la solicitud de página. Esto requiere solo un poco más de configuración que para un solo sitio.
Incluso si está comenzando con un solo sitio web, le recomiendo que lo configure como un host virtual, lo que facilitará la adición de más sitios más adelante. En este artículo, continuaré donde lo dejamos en el artículo anterior, por lo que deberá configurar el sitio web original, un sitio web virtual basado en un nombre.
Preparando el sitio web original
Antes de configurar un segundo sitio web, debe obtener un alojamiento virtual basado en nombres que funcione para el sitio existente. Si no tiene un sitio web existente, regrese y cree uno ahora.
Una vez que tenga su sitio, agregue la siguiente estrofa al final de su /etc/httpd/conf/httpd.conf
archivo de configuración (agregar esta estrofa es el único cambio que necesita hacer en el httpd.conf
archivo):
<VirtualHost 127.0.0.1:80>
DocumentRoot /var/www/html
ServerName www.site1.org
</VirtualHost>
Esta será la primera estrofa de host virtual, y debe permanecer primero, para que sea la definición predeterminada. Eso significa que el acceso HTTP al servidor por dirección IP, o por otro nombre que se resuelva en esta dirección IP pero que no tenga una sección de configuración de host con nombre específico, se dirigirá a este host virtual. Todas las demás estrofas de configuración de host virtual deben seguir esta.
También debe configurar sus sitios web con entradas en /etc/hosts
para proporcionar resolución de nombres. La última vez, solo usamos la dirección IP para localhost
. Normalmente, esto se haría utilizando el servicio de nombres que utilice; por ejemplo, Google o Godaddy. Para su sitio web de prueba, haga esto agregando un nuevo nombre a localhost
línea en /etc/hosts
. Agregue las entradas de ambos sitios web para que no tenga que volver a editar este archivo más adelante. El resultado se ve así:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 www.site1.org www.site2.org
También cambiemos el /var/www/html/index.html
archivo para ser un poco más explícito. Debería verse así (con algo de texto adicional para identificarlo como el sitio web número 1):
<h1>Hello World</h1>
Web site 1.
Reinicie el servidor HTTPD para habilitar los cambios en httpd
configuración. A continuación, puede consultar el sitio web utilizando el navegador de modo de texto Lynx desde la línea de comandos.
[root@testvm1 ~]# systemctl restart httpd
[root@testvm1 ~]# lynx www.site1.org
Hello World
Web site 1.
<snip>
Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.
Arrow keys: Up and Down to move. Right to follow a link; Left to go back.
H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list
Puede ver que se muestra el contenido revisado del sitio web original y que no hay errores evidentes. Presione la tecla "Q", seguida de "Y" para salir del navegador web Lynx.
Configuración del segundo sitio web
Ahora está listo para configurar el segundo sitio web. Cree una nueva estructura de directorio del sitio web con el siguiente comando:
[root@testvm1 html]# mkdir -p /var/www/html2
Tenga en cuenta que el segundo sitio web es simplemente un segundo html
directorio en el mismo /var/www
directorio como el primer sitio.
Ahora cree un nuevo archivo de índice, /var/www/html2/index.html
, con el siguiente contenido (este archivo de índice es un poco diferente, para distinguirlo del sitio web original):
<h1>Hello World -- Again</h1>
Web site 2.
Cree una nueva sección de configuración en httpd.conf
para el segundo sitio web y colóquelo debajo de la estrofa del host virtual anterior (los dos deben verse muy similares). Esta estrofa le dice al servidor web dónde encontrar los archivos HTML para el segundo sitio.
<VirtualHost 127.0.0.1:80>
DocumentRoot /var/www/html2
ServerName www.site2.org
</VirtualHost>
Reinicie HTTPD nuevamente y use Lynx para ver los resultados.
[root@testvm1 httpd]# systemctl restart httpd
[root@testvm1 httpd]# lynx www.site2.org
Hello World -- Again
Web site 2.
<snip>
Commands: Use arrow keys to move, '?' for help, 'q' to quit, '<-' to go back.
Arrow keys: Up and Down to move. Right to follow a link; Left to go back.
H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list
Aquí he comprimido la salida resultante para que se ajuste a este espacio. La diferencia en la página indica que este es el segundo sitio web. Para mostrar ambos sitios web al mismo tiempo, abra otra sesión de terminal y use el navegador web Lynx para ver el otro sitio.
Otras consideraciones
Este ejemplo simple muestra cómo servir dos sitios web con una sola instancia del servidor Apache HTTPD. La configuración de los hosts virtuales se vuelve un poco más compleja cuando se consideran otros factores.
Por ejemplo, es posible que desee utilizar algunos scripts CGI para uno o ambos de estos sitios web. Para ello, crearía directorios para los programas CGI en /var/www
:/var/www/cgi-bin
y /var/www/cgi-bin2
, para ser coherente con la denominación del directorio HTML. Luego, deberá agregar directivas de configuración a las estrofas del host virtual para especificar la ubicación del directorio para los scripts CGI. Cada sitio web también podría tener directorios desde los cuales se podrían descargar archivos; esto también requeriría entradas en la estrofa de host virtual apropiada.
El sitio web de Apache describe otros métodos para administrar varios sitios web, así como opciones de configuración, desde el ajuste del rendimiento hasta la seguridad.
Apache es un poderoso servidor web que se puede usar para administrar sitios web que van desde simples hasta altamente complejos. Aunque su participación general se está reduciendo, Apache sigue siendo el servidor HTTPD más utilizado en Internet.