Anfitriones virtuales en Apache.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

Apache permite mostrar el contenido de diferentes directorios dependiendo del nombre de anfitrión utilizado. Es decir, permite configurar anfitriones virtuales.

El término «anfitrión virtual» se refiere en si a la práctica de hospedar más de un sitio web en un mismo anfitrión. Los anfitriones virtuales pueden estar basados sobre dirección IP —es decir cada sitio Web tiene una dirección IP propia— o bien basado sobre nombres. En cualquiera de los casos los usuarios finales jamás se percatan que hay más de un sitio Web en el mismo servidor.

Cabe señalar que el anfitrión virtual predeterminado muestra el contenido que se encuentre debajo de /var/www/html, por lo cual conviene colocar un contenido genérico que sirva como cortinilla en lugar de mostrarse la página de bienvenida de Apache.

La configuración de un anfitrión virtual requiere los siguientes datos:

Sintaxis.

La sintaxis mínima para Apache 2.4 sería la siguiente:

<VirtualHost [dirección IP|*][:80]>
    Servername [nombre.dominio.com]
    DocumentRoot [/srv/www/dominio/public_html]
</Virtualhost>

En esta configuración mínima se definen:

La plantilla de la configuración recomendada sería la siguiente:

<VirtualHost [dirección IP|*][:80]>
    Servername [nombre.dominio.com]
    DocumentRoot [/srv/www/dominio/public_html]
    [ServerAdmin [alguien@algo.com]]
    [ErrorLog [logs/dominio-error_log]]
    [CustomLog [logs/dominio-access_log] [combined]]
    <Directory "[/srv/www/dominio/public_html]">
        [AllowOverride [all|none|tipo-de-directiva]]
        [Require local]
        [Require all granted]
    </Directory>
</Virtualhost>

Además de la configuración mínima, en esta plantilla se definen:

Ejemplo práctico.

Genere los directorios /srv/www/dominio1/public_html y /srv/www/dominio2/public_html:

mkdir -p /srv/www/{dominio1,dominio2}/public_html

Genere un archivo index.html para el primer directorio creado ejecutando la siguiente línea:

echo "Dominio 1" > /srv/www/dominio1/public_html/index.html

Genere un archivo index.html para el segundo directorio creado ejecutando la siguiente línea:

echo "Dominio 2" > /srv/www/dominio2/public_html/index.html

Genere un nuevo archivo de configuración denominado /etc/httpd/conf.d/virtuales.conf:

vi /etc/httpd/conf.d/virtuales.conf

Añada el siguiente contenido, donde los valores resaltados pueden ser personalizados:

<VirtualHost *:80>
    ServerName www.dominio1.com
    DocumentRoot /src/www/dominio1/public_html
    ServerAdmin alguien@dominio1.com
    ErrorLog logs/dominio1-error_log
    CustomLog logs/dominio1-access_log combined
    <Directory "/src/www/dominio1/public_html">
        AllowOverride all
        Require local
        Require all granted
   </Directory>
</Virtualhost>


<VirtualHost *:80>
    ServerName www.dominio2.net
    DocumentRoot /src/www/dominio2/public_html
    ServerAdmin alguien@dominio2.net
    ErrorLog logs/dominio2-error_log
    CustomLog logs/dominio2-access_log combined
    <Directory "/src/www/dominio2/public_html">
        AllowOverride all
        Require local
        Require all granted
   </Directory>
</Virtualhost>

Guarde el archivo y salga del editor de texto.

Es importante que los nombres de anfitrión de los anfitriones virtuales configurados —valga la redundancia— estén perfectamente resueltos en el propio anfitrión local. Edite el archivo /etc/hosts:

vi /etc/hosts

Debajo del contenido predeterminado añada lo siguiente, donde los valores resaltados pueden ser personalizados:

127.0.0.1    localhost.localdomain localhost
::1               localhost6.localdomain6 localhost6

127.0.0.1    www.dominio1.com
127.0.0.1    www.dominio2.net

Ejecute lo siguiente para aplicar los cambios hechos a la configuración:

systemctl reload apache

Comporbaciones desde el anfitrión local.

Realice la pruebas comparando lo que se ve con lynx al apuntar hacia http://www.dominio1.com/ y hacia http://www.dominio2.net/. Ambos tiene que mostrar contenido diferente. Al acceder a cada URL se debe mostrar «Anfitrión 1» o «Anfitrión 2» dependiendo del anfitrión virtual del que se trate.

Comprobaciones desde un anfitrión remoto.

Si lo desea y quiere poder realizar las pruebas desde su escritorio, necesitará un servidor DNS que resuelva los dos nombres utilizados en los ejemplos descritos anteriormente, con registros apuntando hacia la dirección IP del servidor —sea maquina virtual o máquina física. Si ésto resulta un procedimiento complicado para este momento, puede hacer la resolución de nombre manual. Desde el anfitrión donde configuró Apache, determine primero que IP tiene el servidor que está utilizando para este curso ejecutando lo siguiente:

ip addr list

El siguiente procedimiento se realiza en el anfitrión remoto desde donde también podrá hacer las validaciones.

En cualquiera de los casos, asumiendo que la dirección IP es —por mencionar ejemplo— 192.168.1.64, añada lo siguiente debajo del contenido predeterminado, donde los valores resaltados pueden ser personalizados:

192.168.1.64    www.dominio1.com
192.168.1.64    www.dominio2.net