Configuración de acceso a los servidores virtuales
Configuración de los puertos de escucha
Para determinar los puertos de escucha del servidor web utilizamos la directiva Listen
que podemos modificar en el archivo /etc/apache2/ports.conf
.
Como funciona en los Virtual Host
Listen
solo le dice al servidor principal en qué direcciones y puertos tiene que escuchar. Si no se usan directivas <VirtualHost>
, el servidor se comporta de la misma manera con todas las peticiones que se acepten. Sin embargo, <VirtualHost>
puede usarse para especificar un comportamiento diferente en una o varias direcciones y puertos. Para implementar un host virtual, hay que indicarle primero al servidor que escuche en aquellas direcciones y puertos a usar. Posteriormente se debe crear un una sección <VirtualHost>
en una dirección y puerto específicos para determinar el comportamiento de ese host virtual.
Por defecto los Virtual Host que hemos definido responden desde cualquier IP en el puerto 80, en el fichero /etc/apache2/sites-available/000-default.conf
encontramos:
<VirtualHost *:80>
...
Ejemplo: Virtual Host basado en IP
En este caso nuestra máquina debe tener configurado varias IP (lo vamos a probar en nuestro servidor local que tiene configurado dos interfaces de red), por cada IP se va servir un virtual host.
<VirtualHost 192.168.56.3:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/externa
ErrorLog ${APACHE_LOG_DIR}/error_externa.log
CustomLog ${APACHE_LOG_DIR}/access_externa.log combined
</VirtualHost>
<VirtualHost 172.22.0.1:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/interna
ErrorLog ${APACHE_LOG_DIR}/error_interna.log
CustomLog ${APACHE_LOG_DIR}/access_interna.log combined
</VirtualHost>
Ejemplo: Servir el mismo contenido en varias IP
Suponemos que nuestro servidor tiene dos interfaces de red (una interfaz interna (intranet) y otra externa (internet)), queremos que responda a las dos direcciones:
<VirtualHost 192.168.56.3 172.22.0.1>
DocumentRoot /var/www/externa
ServerName servidor.example.com
ServerAlias servidor
...
</VirtualHost>
Ejemplo: Sirviendo distintos sitios en distintos puertos
En esta ocasión hemos definido dos puertos de escucha en el fichero /etc/apache2/ports.conf
:
Listen 80
Listen 8080
Y la configuración de los virtual host podría ser la siguiente:
<VirtualHost *:80>
ServerName servidor.example.com
DocumentRoot /var/www/externa
</VirtualHost>
<VirtualHost *:8080>
ServerName servidor.example.com
DocumentRoot /var/www/interna
</VirtualHost>