Comprensione di valori diversi per la direttiva 'hear' di nginx


10

Sto scrivendo nginx config e ho una domanda fondamentale.

Quali sono le differenze tra:

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

Il mio obiettivo è proteggere questa applicazione Web, ma rimanere compatibile anche con i vecchi clienti.

Nota: capisco che [::]:443ha a che fare con ipv6, ma comprende anche ipv4 in questo caso? Vuoi cancellare i miei concetti.

Risposte:


16

listen 443 ssl: fa in modo che nginx ascolti su tutto l'indirizzo ipv4 sul server, sulla porta 443 ( 0.0.0.0:443)

mentre

listen [::]:443 ssl: fa in modo che nginx ascolti su tutto l'indirizzo ipv6 sul server, sulla porta 443 ( :::443)


[::]:443Nginx non risponderà su ipv4 per impostazione predefinita, a meno che non si specifichi il parametro ipv6only=off:

listen [::]:443 ipv6only=off;


Come da documento: http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

ssl:

Il parametro ssl (0.7.14) consente di specificare che tutte le connessioni accettate su questa porta dovrebbero funzionare in modalità SSL.

http2:

Il parametro http2 (1.9.5) configura la porta per accettare connessioni HTTP / 2 .

Ciò non significa che accetta solo connessioni HTTP / 2.

Secondo RFC7540

Un client che effettua una richiesta per un URI "http" senza una conoscenza preliminare del supporto per HTTP / 2 sull'hop successivo utilizza il meccanismo di aggiornamento HTTP. Il client esegue una richiesta HTTP / 1.1 che include un campo di intestazione Aggiornamento con il token "h2c".

Un server che non supporta HTTP / 2 può rispondere alla richiesta come se il campo dell'intestazione Aggiornamento fosse assente.

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

Un server che supporta HTTP / 2 accetta l'aggiornamento con una risposta 101 (Switching Protocols). Dopo la riga vuota che termina la risposta 101, il server può iniziare a inviare frame HTTP / 2.

Riassumere :

Un client che non supporta HTTP / 2 non chiederà mai al server un aggiornamento della comunicazione HTTP / 2: la comunicazione tra loro sarà completamente HTTP1 / 1.

Un client che supporta HTTP / 2 chiederà al server (utilizzando HTTP1 / 1) un aggiornamento HTTP / 2:

  • Se il server è pronto per HTTP / 2, il server noterà il client in quanto tale: la comunicazione tra loro verrà commutata su HTTP / 2.
  • Se il server non è pronto per HTTP / 2, il server ignorerà la richiesta di aggiornamento rispondendo con HTTP1 / 1: la comunicazione tra loro dovrebbe rimanere abbondantemente HTTP1 / 1.

Forse più riassunti qui: http://qnimate.com/http2-compatibility-with-old-browsers-and-servers/


Tuttavia, il documento nginx afferma quanto segue su HTTP / 2 su TLS:

Si noti che l'accettazione delle connessioni HTTP / 2 su TLS richiede il supporto dell'estensione TLS "Application-Layer Protocol Negotiation" (ALPN), disponibile solo dalla versione 1.0.2 di OpenSSL.

Assicurarsi che i vecchi client siano conformi a questo requisito.


0

C'è un'opzione chiamata ipv6onlyche determina se l'indirizzo IPv6 si applica anche a IPv4. Di default è acceso (il che significa che non lo fa).

Il manuale afferma che può essere impostato solo una volta, il che penso significhi che se lo si disattiva in una listendirettiva, è disattivato per tutti.

Vedi questo documento per i dettagli.


Vedi questo articolo su HTTP / 2.
Richard Smith,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.