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>

Actualizado: