Grundlegendes zu verschiedenen Werten für die Nginx-Direktive 'listen'

10

Ich schreibe nginx config und habe eine grundlegende Frage.

Was sind die Unterschiede zwischen:

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

Mein Ziel ist es, diese Webanwendung zu sichern, aber auch für alte Clients kompatibel zu bleiben.

Hinweis: Ich verstehe, dass dies [::]:443mit IPv6 zu tun hat, aber umfasst es in diesem Fall auch IPv4? Willst du meine Konzepte klären.

Hassan Baig
quelle

Antworten:

16

listen 443 ssl: Lässt nginx alle IPv4-Adressen auf dem Server an Port 443 abhören ( 0.0.0.0:443)

während

listen [::]:443 ssl: Lässt nginx alle IPv6-Adressen auf dem Server an Port 443 abhören ( :::443)


[::]:443Nginx reagiert standardmäßig nicht auf IPv4, es sei denn, Sie geben den folgenden Parameter an ipv6only=off:

listen [::]:443 ipv6only=off;


Gemäß dem Dokument: http://nginx.org/en/docs/http/ngx_http_core_module.html#listen

ssl:

Mit dem Parameter ssl (0.7.14) können Sie festlegen, dass alle an diesem Port akzeptierten Verbindungen im SSL-Modus funktionieren sollen.

http2:

Der Parameter http2 (1.9.5) konfiguriert den Port so, dass HTTP / 2- Verbindungen akzeptiert werden .

Dies bedeutet nicht, dass nur HTTP / 2-Verbindungen akzeptiert werden.

Gemäß RFC7540

Ein Client, der ohne vorherige Kenntnis der Unterstützung von HTTP / 2 im nächsten Hop eine Anforderung für einen "http" -URI anfordert, verwendet den HTTP-Upgrade-Mechanismus. Der Client stellt dazu eine HTTP / 1.1-Anforderung, die ein Upgrade-Headerfeld mit dem Token "h2c" enthält.

Ein Server, der HTTP / 2 nicht unterstützt, kann auf die Anforderung antworten, als ob das Feld Upgrade-Header nicht vorhanden wäre.

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

Ein Server, der HTTP / 2 unterstützt, akzeptiert das Upgrade mit einer Antwort von 101 (Switching Protocols). Nach der leeren Zeile, die die 101-Antwort beendet, kann der Server mit dem Senden von HTTP / 2-Frames beginnen.

Zusammenfassen :

Ein Client, der HTTP / 2 nicht unterstützt, wird den Server niemals nach einem Upgrade der HTTP / 2-Kommunikation fragen: Die Kommunikation zwischen ihnen erfolgt vollständig über HTTP1 / 1.

Ein Client, der HTTP / 2 unterstützt, fordert den Server (unter Verwendung von HTTP1 / 1) auf, ein HTTP / 2-Upgrade durchzuführen:

  • Wenn der Server HTTP / 2-fähig ist, bemerkt der Server den Client als solchen: Die Kommunikation zwischen ihnen wird auf HTTP / 2 umgeschaltet.
  • Wenn der Server nicht HTTP / 2-fähig ist, ignoriert der Server die Upgrade-Anforderung, die mit HTTP1 / 1 beantwortet wird: Die Kommunikation zwischen ihnen sollte ausreichend HTTP1 / 1 bleiben.

Vielleicht hier mehr zusammengefasst: http://qnimate.com/http2-compatibility-with-old-browsers-and-servers/


Das Nginx-Dokument gibt jedoch Folgendes zu HTTP / 2 über TLS an:

Beachten Sie, dass für das Akzeptieren von HTTP / 2-Verbindungen über TLS die TLPN-Erweiterungsunterstützung „Application-Layer Protocol Negotiation“ (ALPN) erforderlich ist, die erst seit OpenSSL Version 1.0.2 verfügbar ist.

Stellen Sie sicher, dass alte Kunden diese Anforderung erfüllen.

krisFR
quelle
0

Es wird eine Option aufgerufen, ipv6onlydie bestimmt, ob die IPv6-Adresse auch für IPv4 gilt. Standardmäßig ist es aktiviert (was bedeutet, dass dies nicht der Fall ist).

Das Handbuch besagt, dass es nur einmal eingestellt werden kann, was meiner Meinung nach bedeutet, dass listenes für alle ausgeschaltet ist , wenn Sie es in einer Anweisung ausschalten.

Weitere Informationen finden Sie in diesem Dokument .

Richard Smith
quelle
Siehe diesen Artikel zu HTTP / 2.
Richard Smith