Versión 2.5 del Servidor HTTP Apache
Configurando Apache HTTP Server para que escuche en una dirección y puertos específicos.
Módulos Relacionados | Directivas Relacionadas |
---|---|
Cuando httpd se ejecuta, se mapea a una dirección y un puerto en la
máquina local, y espera a recibir peticiones. Por defecto, escucha en
todas las direcciones de la máquina. Ahora bien, se le puede especificar
que escuche en un determinado puerto, o en una sola dirección IP especifica,
o una combinación de ambos. A menudo esto se combina con la característica
de los Hosts virtuales, que determina como responde el
httpd
a diferentes direcciones IP, nombres de máquinas y puertos.
La directiva Listen
le dice al servidor que acepte peticiones en el puerto o puertos que
se le especifiquen al servidor, o a combinaciones de direcciones y
puertos. Si sólo se especifica el número del puerto en la directiva
Listen
, el servidor escuchará en
ese puerto pero en todas las interfaces de red.
Si además del puerto se le especifica una dirección IP, el servidor escuchará
en el puerto y en la interfaz de red asociado a la dirección IP
que se le ha especificado en la directiva. Se pueden especificar
múltiples directivas Listen
para
especificar un determinado número de IP´s y puertos por donde el servidor escuchará.
El servidor por tanto, responderá a las peticiones en cualquiera de las IP´s y puertos
listados en la directiva.
Por ejemplo, para hacer que el servidor escuche en ambos puertos 80 y 8080 en todas sus interfaces de red, se usa lo siguiente:
Listen 80 Listen 8000
Para hacer que el servidor acepte peticiones en el puerto 80 en una sola interfaz de red, usaremos:
Listen 192.0.2.1:80 Listen 192.0.2.5:8000
Las direcciones IPv6 deberán ir entre '[ ]' corchetes como en el siguiente ejemplo:
Listen [2001:db8::a00:20ff:fea7:ccea]:80
Si se superponen directivas de tipo Listen
, dará como resultado un error fatal
que impedirá que se inicie el servidor.
(48)Address already in use: make_sock: could not bind to address [::]:80
Puede mirar el articulo de la wiki de consejos para solucionar problemas relacionados.
Cuando httpd se reinicia, hay que tener especial consideración en los
cambios que se realicen a la directiva Listen
.
Durante un reinicio, httpd mantiene los puertos (como en la configuración original)
para evitar generar errores del tipo "Conexión rechazada" para cualquier intento
nuevo de establecer la conexión contra el servidor. Si se realiza algún cambio
al conjunto de la directiva Listen
, es probable que entre en conflicto con la configuración antigua, la configuración fallará y el servidor
no se iniciará.
Por ejemplo, cambiar de la configuración:
Listen 127.0.0.1:80
a la siguiente configuración, es probable que falle, porque mapear el puerto 80 a todas las direcciones, entra en conflicto con sólo mapear el puerto 80 a la 127.0.0.1.
Listen 80
Para que este tipo de cambios surtan efecto, es necesario parar el servidor, y después iniciarlo.
Un creciente número de plataformas implementan ya IPv6, y APR soporta IPv6 en la mayoría de estas plataformas, permitiendo así a httpd asignar sockets IPv6, y manejar las respuestas enviadas a través de IPv6.
Un factor bastante complejo para un administrador del httpd
es si un socket IPv6 puede o no manejar tanto conexiones IPv6
como IPv4. El manejo por httpd de conexiones IPv4 con socket IPv6
se debe al mapeo de direcciones IPv4 sobre IPv6, que
está permitido por defecto en muchas plataformas, pero no lo está
en sistemas FreeBSD, NetBSD y Open BSD, con el fin de que en estas
plataformas, cumpla con la política del sistema.
En los sistemas que no está permitido el mapeo por defecto,
existe un parámetro de configure
especial
para cambiar éste comportamiento para httpd.
Por otro lado, en algunas plataformas, como Linux y True64, la
única forma para el manejo de IPv4 e IPv6 al mismo
tiempo es mediante direcciones mapeadas.
Si quieres que httpd
maneje amos tipos de conexiones IPv4 e IPv6
con el mínimo de sockets, hay que especificar la opción
--enable-v4-mapped
al configure
.
--enable-v4-mapped
es la opción que está estipulada por defecto
en todos los sistemas menos en FreeBSD, NetBSD y Open BSD, por
lo que es probablemente como se compiló su httpd.
Si lo que quiere es manejar sólo conexiones IPv4, independientemente de
lo que soporten APR y su plataforma, especifique
una dirección IPv4 por cada directiva
Listen
, como en el siguiente
ejemplo:
Listen 0.0.0.0:80 Listen 192.0.2.1:80
Si en cambio, su plataforma lo soporta, y lo que quiere es que su httpd
soporte tanto conexiones IPv4 como IPv6 en diferentes sockets (ejemplo.: para
deshabilitar mapeo de direcciones IPv4), especifique la opción
--disable-v4-mapped
al configure
. --disable-v4-mapped
es la opción por defecto
en FreeBSD, NetBSD y OpenBSD.
El segundo argumento en la directiva Listen
el protocolo que es opcional no es algo que se requiera en las configuraciones.
Si éste argumento no se especifica, https
es el protocolo
usado por defecto en el puerto 443 y http
para el resto.
El protocolo se utiliza para determinar que módulo deberá manejar la petición,
y se le aplicarán optimizaciones específicas del protocolo con la directiva
AcceptFilter
.
Sólo necesitará especificar el protocolo si no está escuchando en un puerto
de los que son estándares, por ejemplo si ejecuta un sitio web https
en el puerto 8443:
Listen 192.170.2.1:8443 https
La directiva Listen
no implementa los
Hosts Virtuales - solo le dice al servidor en que direcciones
y puertos debe escuchar. Si no hay directiva
<VirtualHost>
en uso, el servidor se comportará de la misma manera para todas las
peticiones aceptadas. Ahora bien,
<VirtualHost>
puede ser usado para especificar un comportamiento diferente en una o
varias direcciones o puertos.
Para implementar los Hosts Virtuales, antes se le tiene que decir al servidor
que direcciones y puertos van a ser usados.
Después de esto, se deberá especificar una sección de la directiva
<VirtualHost>
especificando direcciones y puertos que se van a usar en el Host Virtual
Note que si se configura un
<VirtualHost>
para una dirección y puerto en el que el servidor no está escuchando,
no se podrá acceder al Host Virtual.