Entendendo valores diferentes para a diretiva nginx 'listen'

4

Estou escrevendo nginx config e tenho uma questão fundamental.

Quais são as diferenças entre:

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

Meu objetivo é proteger esse aplicativo da Web, mas também permanecer compatível para clientes antigos.

Nota: Eu entendo que [::]:443 tem que usar o ipv6, mas ele também inclui o ipv4 nesse caso? Quero limpar meus conceitos.

    
por Hassan Baig 23.09.2017 / 13:27

2 respostas

8

listen 443 ssl : faz o nginx escutar em todos os endereços ipv4 no servidor, na porta 443 ( 0.0.0.0:443 )

enquanto

listen [::]:443 ssl : faz o nginx escutar em todos os endereços ipv6 no servidor, na porta 443 ( :::443 )

[::]:443 não fará o nginx responder no ipv4 por padrão, a menos que você especifique o parâmetro ipv6only=off :

listen [::]:443 ipv6only=off;

De acordo com o documento: link

ssl:

The ssl parameter (0.7.14) allows specifying that all connections accepted on this port should work in SSL mode.

link

The http2 parameter (1.9.5) configures the port to accept HTTP/2 connections.

Isso não significa que ele aceita apenas conexões HTTP / 2.

De acordo com RFC7540

A client that makes a request for an "http" URI without prior knowledge about support for HTTP/2 on the next hop uses the HTTP Upgrade mechanism. The client does so by making an HTTP/1.1 request that includes an Upgrade header field with the "h2c" token.

A server that does not support HTTP/2 can respond to the request as though the Upgrade header field were absent.

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

A server that supports HTTP/2 accepts the upgrade with a 101 (Switching Protocols) response. After the empty line that terminates the 101 response, the server can begin sending HTTP/2 frames.

Para resumir:

Um cliente que não suporta HTTP / 2 nunca pedirá ao servidor por um Atualização de comunicação HTTP / 2: a comunicação entre eles será totalmente HTTP1 / 1.

Um cliente que suporta HTTP / 2 perguntará ao servidor (usando HTTP1 / 1) por uma atualização HTTP / 2:

  • Se o servidor estiver pronto para HTTP / 2, o servidor notará o cliente assim: a comunicação entre eles será alterada para HTTP / 2.
  • Se o servidor não estiver pronto para HTTP / 2, o servidor ignorará o solicitação de atualização respondendo com HTTP1 / 1: a comunicação entre eles devem ficar bastante HTTP1 / 1.

Talvez mais resumido aqui: link

No entanto, o documento nginx afirma o seguinte sobre HTTP / 2 sobre TLS:

Note that accepting HTTP/2 connections over TLS requires the “Application-Layer Protocol Negotiation” (ALPN) TLS extension support, which is available only since OpenSSL version 1.0.2.

Certifique-se de que os clientes antigos estão em conformidade com este requisito.

    
por 23.09.2017 / 15:28
0

Existe uma opção chamada ipv6only que determina se o endereço IPv6 também se aplica ao IPv4. Por padrão, ele está ativado (o que significa que não funciona).

O manual informa que ele só pode ser definido uma vez, o que, na minha opinião, significa que, se você desativá-lo em uma diretiva listen , ele estará desativado para todos.

Veja este documento para detalhes.

    
por 23.09.2017 / 14:19

Tags