Virtual Host

De WikiSalud
Saltar a: navegación, buscar

Contenido

VirtualHost de Apache en Debian

En este artículo se describen las configuraciones básicas de Apache en Debian para utilizar VirtualHost.

¿Qué es un Virtual Host?

El término Virtual Host se refiere a la práctica de ejecutar más de un sitio web (por ejemplo, empresa1.ejemplo.com y empresa2.ejemplo.com) en la misma máquina. Los virtual host pueden ser "basados en la IP", lo que significa que se tiene una IP diferente para cada sitio web, o "basados en el nombre", cuando se tienen varios nombres ejecutándose en la misma dirección IP. El hecho que se ejecuten en la misma máquina física no es evidente para el usuario.

Un ejemplo práctico

Supóngase que se desea publicar dos sitios web en la misma máquina para realizar pruebas en localhost, estos sitios serán basados en el nombre. Uno responderá al nombre de produccion.localhost y el otro como prueba.localhost. En la carpeta de configuración de Apache (en el caso de Debian, /etc/apache2/sites-available/) se crean los dos archivos con la configuración.

Primero, se debe verificar la directiva NameVirtualHost configurada en el sistema. Como usuario root ejecutar

grep NameVirtualHost /etc/apache2/ports.conf

Aparecerá algo similar a lo siguiente:

  1. NameVirtualHost 192.168.1.1:80
  2. NameVirtualHost *:80

El caso 1 indica que NameVirtualHost está configurado en la IP 192.168.1.1 en el puerto 80. Para el caso 2, NameVirtualHost está configurado para todas las direcciones IP configuradas en el servidor en el puerto 80.

Esta dirección IP se repetirá en cada VirtualHost que se cree. Por lo que es importante colocar el valor indicado.

Como usuario root, moverse a la carpeta:

cd /etc/apache2/sites-available/

Con un editor de texto crear los archivos descritos a continuación y colocar el contenido respectivo.

Contenido del archivo /etc/apache2/sites-available/produccion.localhost

# Inicio del archivo
<VirtualHost 192.168.1.1:80> 
        ServerName produccion.localhost 
        DocumentRoot /var/www/produccion
        <Directory /var/www/produccion > 
                Options FollowSymLinks MultiViews 
                AllowOverride None 
                Order allow,deny 
                allow from all 
        </Directory> 
        ErrorLog ${APACHE_LOG_DIR}/produccion.localhost-error.log 
        # Possible values include: debug, info, notice, warn, error, crit, 
        # alert, emerg. 
        LogLevel warn 
        CustomLog ${APACHE_LOG_DIR}/produccion.localhost-access.log combined 
</VirtualHost>
# Fin del archivo

Contenido del archivo /etc/apache2/sites-available/prueba.localhost

# Inicio del archivo
<VirtualHost 192.168.1.1:80>
        NameVirtualHost prueba.localhost 
        DocumentRoot /var/www/prueba
        <Directory /var/www/prueba > 
                Options Indexes FollowSymLinks MultiViews 
                AllowOverride None 
                Order allow,deny 
                allow from all 
        </Directory> 
        ErrorLog ${APACHE_LOG_DIR}/prueba.localhost-error.log 
        # Possible values include: debug, info, notice, warn, error, crit, 
        # alert, emerg. 
        LogLevel warn 
        CustomLog ${APACHE_LOG_DIR}/prueba.localhost-access.log combined 
</VirtualHost>
# Fin del archivo
NOTA IMPORTANTE: Para que un virtualhost responda a dos nombres distintos hay que utilizar una directiva
adicional, ServerAlias.

Luego, como root ejecutar:

a2ensite produccion.localhost
a2ensite prueba.localhost

Reiniciar el servicio de Apache

/etc/init.d/apache2 restart

Consideraciones adicionales. VirtualHost por IP

Si lo que se desea es que los sitios web publicados sean basados en la IP. En la directiva Virtualhost se coloca la IP respectiva. Por ejemplo:

# Inicio del archivo
NameVirtualHost 127.0.0.2:80
<VirtualHost 127.0.0.2:80>
        ServerName test.localhost 
        DocumentRoot /var/www/test
        <Directory /var/www/test > 
                Options Indexes FollowSymLinks MultiViews 
                AllowOverride None 
                Order allow,deny 
                allow from all 
        </Directory> 
        ErrorLog ${APACHE_LOG_DIR}/test.localhost-error.log 
        # Possible values include: debug, info, notice, warn, error, crit, 
        # alert, emerg. 
        LogLevel warn 
        CustomLog ${APACHE_LOG_DIR}/test.localhost-access.log combined 
</VirtualHost>
# Fin del archivo

De esta manera, el sitio responderá tanto al nombre (test.localhost) como a la IP (127.0.0.2) en el puerto 80.

Si se desea agregar otro VirtualHost para otra IP, es necesario agregar otra directiva NameVirtualHost con su respectivo puerto.

Se debe agregar en el archivo /etc/hosts la IP. Por ejemplo:

# Inicio del archivo
127.0.0.1       localhost
127.0.0.2       test.localhost
# Fin del archivo

Configuración de VirtualHost y Jessie

Con la versión de Jessie existen algunas consideraciones a tomar en cuenta para configurar correctamente Apache.

Como usuario root, moverse a la carpeta:

cd /etc/apache2/sites-available/

Con un editor de texto crear los archivos descritos a continuación y colocar el contenido respectivo.

Contenido del archivo /etc/apache2/sites-available/produccion.localhost.conf

# Inicio del archivo
<VirtualHost 192.168.1.1:80> 
        ServerName produccion.localhost 
        DocumentRoot /var/www/produccion
        <Directory /var/www/produccion > 
                Options FollowSymLinks MultiViews 
                AllowOverride None 
                #Order allow,deny 
                #allow from all
                Require all granted 
        </Directory> 
        ErrorLog ${APACHE_LOG_DIR}/produccion.localhost-error.log 
        # Possible values include: debug, info, notice, warn, error, crit, 
        # alert, emerg. 
        LogLevel warn 
        CustomLog ${APACHE_LOG_DIR}/produccion.localhost-access.log combined 
</VirtualHost>
# Fin del archivo

En el paso anterior, tenemos las siguientes variaciones:

  • El nombre debe terminar con la extensión .conf
  • Las opciones NameVirtualHost, Order allow, deny, allow from all en la nueva versión de apache ya no están disponibles por tanto hay que comentarlas.
  • Agregar la línea Require all granted, para las versiones de apache 2.4 o superior.

Luego, como root ejecutar:

a2ensite produccion.localhost.conf

Reiniciar el servicio de Apache

/etc/init.d/apache2 restart


Por defecto en esta versión, la carpeta habilitada para alojar los sitios web es /var/www/ Si se trabaja con otra ruta, se deberá agregar dicha ruta en /etc/apache2/apache2.conf

Para poder modificar el archivo debe ingresar como usuario root y luego con un editor de texto ubicarse debajo de las siguientes líneas:

<Directory /var/www/>
        Options Indexes FollowSymLinks
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Agregar las siguientes líneas:

<Directory /ruta>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Ruta es la carpeta en la que estaremos trabajando, por ejemplo /home/USUARIO

Al realizar este cambio en el VirtualHost podremos colocar la ruta que específiquemos en las siguiente líneas.

        DocumentRoot /ruta
        <Directory /ruta >
NOTA IMPORTANTE: Cada cambio realizado en los archivos de configuración de Apache o VirtualHost se debe reiniciar el servicio de Apache para poder visualizar los cambios..
Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas