Direcciones IP y puertos de escucha - Servidor HTTP Apache

Apache Server 2.0

<-

Direcciones IP y puertos de escucha

Cómo configurar Apache para que escuche en direcciones IP y puertos específicos.

top

Introducción

Cuando Apache se inicia, comienza a esperar peticiones entrantes en determinados puertos y direcciones de la máquina en la que se está ejecutando. Sin embargo, si quiere que Apache escuche solamente en determinados puertos específicos, o solamente en determinadas direcciones, o en una combinación de ambos, debe especificarlo adecuadamente. Esto puede además combinarlo con la posibilidad de usar hosts virtuales, funcionalidad con la que un servidor Apache puede responder a peticiones en diferentes direcciones IP, diferentes nombres de hosts y diferentes puertos.

La directiva Listen le indica al servidor que acepte peticiones entrantes solamente en los puertos y en las combinaciones de puertos y direcciones que se especifiquen. Si solo se especifica un número de puerto en la directiva Listen el servidor escuchará en ese puerto, en todas las interfaces de red de la máquina. Si se especifica una dirección IP y un puerto, el servidor escuchará solamente en la interfaz de red a la que pertenezca esa dirección IP y solamente en el puerto indicado. Se pueden usar varias directivas Listen para especificar varias direcciones IP y puertos de escucha. El servidor responderá a las peticiones de todas las direcciones y puertos que se incluyan.

Por ejemplo, para hacer que el servidor acepte conexiones tanto en el puerto 80 como en el puerto 8000, puede usar:

Listen 80
Listen 8000

Para hacer que el servidor acepte conexiones en dos interfaces de red y puertos específicos, use

Listen 192.170.2.1:80
Listen 192.170.2.5:8000

Las direcciones IPv6 deben escribirse entre corchetes, como en el siguiente ejemplo:

Listen [2001:db8::a00:20ff:fea7:ccea]:80

top

Consideraciones especiales para IPv6

Cada vez más plataformas implementan IPv6, y APR soporta IPv6 en la mayor parte de esas plataformas, permitiendo que Apache use sockets IPv6 y pueda tratar las peticiones que se envían con IPv6.

Un factor de complejidad para los administradores de Apache es si un socket IPv6 puede tratar tanto conexiones IPv4 como IPv6. Para tratar conexiones IPv4 con sockets IPv6 se utiliza un traductor de direcciones IPv4-IPv6, cuyo uso está permitido por defecto en la mayor parte de las plataformas, pero que está desactivado por defecto en FreeBSD, NetBSD, y OpenBSD para cumplir con la política system-wide en esas palaformas. Pero incluso en los sistemas en los que no está permitido su uso por defecto, un parámetro especial de configure puede modificar ese comportamiento.

Si quiere que Apache trate conexiones IPv4 y IPv6 con un mínimo de sockets, lo que requiere traducir direcciones IPv4 a IPv6, especifique la opción de configure --enable-v4-mapped y use directivas Listen genéricas de la siguiente forma:

Listen 80

Con --enable-v4-mapped, las directivas Listen en el fichero de configuración por defecto creado por Apache usarán ese formato. --enable-v4-mapped es el valor por defecto en todas las plataformas excepto en FreeBSD, NetBSD, y OpenBSD, de modo que esa es probablemente la manera en que su servidor Apache fue construido.

Si quiere que Apache solo procese conexiones IPv4, sin tener en cuenta cuál es su plataforma o qué soporta APR, especifique una dirección IPv4 en todas las directivas Listen, como en estos ejemplos:

Listen 0.0.0.0:80
Listen 192.170.2.1:80

Si quiere que Apache procese conexiones IPv4 y IPv6 en sockets diferentes (es decir, deshabilitar la conversión de direcciones IPv4 a IPv6), especifique la opción de configure --disable-v4-mapped y use directivas Listen específicas como en el siguiente ejemplo:

Listen [::]:80
Listen 0.0.0.0:80

Con --disable-v4-mapped, las directivas Listen en el fichero de configuración que Apache crea por defecto usarán ese formato. --disable-v4-mapped se usa por defecto en FreeBSD, NetBSD, y OpenBSD.

top

Cómo funciona este mecanismo en hosts virtuales

Listen no implementa hosts virtuales. 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. Entonces se debe crear un una sección <VirtualHost> en una dirección y puerto específicos para determinar el comportamiento de ese host virtual. Tenga en cuenta que si se especifica en una sección <VirtualHost> una dirección y puerto en los que el servidor no está escuchando, ese host virtual no podrá ser accedido.