Comprender los diferentes valores para la directiva nginx 'listen'

10

Estoy escribiendo nginx config, y tengo una pregunta fundamental.

¿Cuáles son las diferencias entre:

listen 443 ssl;vs listen [::]:443 ssl;vslisten [::]:443 ssl http2;

Mi objetivo es asegurar esta aplicación web, pero también seguir siendo compatible para clientes antiguos.

Nota: Entiendo que [::]:443tiene que ver con ipv6, pero ¿abarca también ipv4 en este caso? Quiero aclarar mis conceptos.

Hassan Baig
fuente

Respuestas:

16

listen 443 ssl: hace que nginx escuche en todas las direcciones ipv4 del servidor, en el puerto 443 ( 0.0.0.0:443)

mientras

listen [::]:443 ssl: hace que nginx escuche en todas las direcciones ipv6 del servidor, en el puerto 443 ( :::443)


[::]:443no hará que nginx responda en ipv4 de forma predeterminada, a menos que especifique el parámetro ipv6only=off:

listen [::]:443 ipv6only=off;


Según el documento: http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

ssl:

El parámetro ssl (0.7.14) permite especificar que todas las conexiones aceptadas en este puerto deberían funcionar en modo SSL.

http2:

El parámetro http2 (1.9.5) configura el puerto para aceptar conexiones HTTP / 2 .

Esto no significa que solo acepte conexiones HTTP / 2.

Según RFC7540

Un cliente que realiza una solicitud de un URI "http" sin conocimiento previo sobre la compatibilidad con HTTP / 2 en el siguiente salto utiliza el mecanismo de actualización HTTP. El cliente lo hace haciendo una solicitud HTTP / 1.1 que incluye un campo de encabezado de actualización con el token "h2c".

Un servidor que no es compatible con HTTP / 2 puede responder a la solicitud como si el campo de encabezado de actualización estuviera ausente.

HTTP/1.1 200 OK Content-Length: 243 Content-Type: text/html

Un servidor que admite HTTP / 2 acepta la actualización con una respuesta 101 (Protocolos de conmutación). Después de la línea vacía que termina la respuesta 101, el servidor puede comenzar a enviar tramas HTTP / 2.

Para resumir :

Un cliente que no admite HTTP / 2 nunca le pedirá al servidor una actualización de comunicación HTTP / 2: la comunicación entre ellos será completamente HTTP1 / 1.

Un cliente que admita HTTP / 2 le pedirá al servidor (usando HTTP1 / 1) una actualización de HTTP / 2:

  • Si el servidor está preparado para HTTP / 2, el servidor notará al cliente como tal: la comunicación entre ellos se cambiará a HTTP / 2.
  • Si el servidor no está preparado para HTTP / 2, entonces el servidor ignorará la solicitud de actualización respondiendo con HTTP1 / 1: la comunicación entre ellos debería mantenerse bastante HTTP1 / 1.

Quizás más resumido aquí: http://qnimate.com/http2-compatibility-with-old-browsers-and-servers/


Sin embargo, el documento nginx establece lo siguiente sobre HTTP / 2 sobre TLS:

Tenga en cuenta que la aceptación de conexiones HTTP / 2 a través de TLS requiere el soporte de extensión TLS "Negociación de protocolo de capa de aplicación" (ALPN), que está disponible solo desde OpenSSL versión 1.0.2.

Asegúrese de que los clientes antiguos cumplan con este requisito.

krisFR
fuente
0

Hay una opción llamada ipv6onlyque determina si la dirección IPv6 también se aplica a IPv4. Por defecto está activado (lo que significa que no).

El manual establece que solo se puede configurar una vez, lo que creo que significa que si lo desactiva en una listendirectiva, se desactivará para todos.

Vea este documento para más detalles.

Richard Smith
fuente
Vea este artículo en HTTP / 2.
Richard Smith el