Entendendo diferentes valores para a diretiva nginx 'listen'

10

Estou escrevendo a configuração do nginx e tenho uma pergunta fundamental.

Quais são as diferenças entre:

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

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

Nota: Eu entendo que isso [::]:443tem a ver com o ipv6, mas ele abrange o ipv4 também neste caso? Deseja limpar meus conceitos.

Hassan Baig
fonte

Respostas:

16

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

enquanto

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


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

listen [::]:443 ipv6only=off;


Conforme o documento: http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

ssl:

O parâmetro ssl (0.7.14) permite especificar que todas as conexões aceitas nesta porta devem funcionar no modo SSL.

http2:

O parâmetro http2 (1.9.5) configura a porta para aceitar conexões HTTP / 2 .

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

Conforme RFC7540

Um cliente que solicita um URI "http" sem conhecimento prévio sobre o suporte ao HTTP / 2 no próximo salto usa o mecanismo de Atualização HTTP. O cliente faz isso fazendo uma solicitação HTTP / 1.1 que inclui um campo de cabeçalho Upgrade com o token "h2c".

Um servidor que não suporta HTTP / 2 pode responder à solicitação como se o campo Cabeçalho de atualização estivesse ausente.

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

Um servidor que suporte HTTP / 2 aceita a atualização com uma resposta 101 (Protocolos de comutação). Após a linha vazia que finaliza a resposta 101, o servidor pode começar a enviar quadros HTTP / 2.

Para resumir:

Um cliente que não suporta HTTP / 2 nunca solicitará ao servidor uma atualização de comunicação HTTP / 2: a comunicação entre eles será totalmente HTTP1 / 1.

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

  • Se o servidor estiver pronto para HTTP / 2, o servidor notará o cliente como tal: a comunicação entre eles será alternada para HTTP / 2.
  • Se o servidor não estiver pronto para HTTP / 2, o servidor ignorará a solicitação de atualização que responde com HTTP1 / 1: a comunicação entre eles deve permanecer bastante HTTP1 / 1.

Talvez seja mais resumido aqui: http://qnimate.com/http2-compatibility-with-old-browsers-and-servers/


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

Observe que aceitar conexões HTTP / 2 por TLS requer o suporte à extensão TLS "Application-Layer Protocol Negotiation" (ALPN), disponível apenas desde o OpenSSL versão 1.0.2.

Verifique se os clientes antigos estão em conformidade com esse requisito.

krisFR
fonte
0

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

O manual declara que só pode ser definido uma vez, o que eu acho que significa que se você o desativa em uma listendiretiva, é desabilitado para todos.

Veja este documento para detalhes.

Richard Smith
fonte
Veja este artigo em HTTP / 2.
Richard Smith