[Redaktion: NGINX unterstützt HTTP/3 mit QUIC jetzt offiziell. Die Unterstützung ist für Open-Source-Nutzer in der Mainline-Version NGINX 1.25.1 und für Unternehmenskunden in NGINX Plus R30 verfügbar.]
[ngx_snippet name=’table-style-blog’]
Wir freuen uns, Ihnen mitteilen zu können, dass unsere Vorschauimplementierung der NGINX-Unterstützung für QUIC+HTTP/3 jetzt als vorkompilierte Binärpakete für zwei Distributionen verfügbar ist:
- Red Hat Enterprise Linux 9 und binärkompatible Varianten
- Ubuntu 22.04
Die Binärdateien sind das neueste Ergebnis aus dem quic-Branch des separaten nginx-quic-Repositorys, in dem die Vorschauimplementierung bereitgestellt wird. Wie schon seit dem Zeitpunkt, als wir mit der Arbeit an QUIC+HTTP/3 in NGINX begonnen haben, können Sie NGINX Open Source mit QUIC+HTTP/3 und einer Auswahl an SSL/TLS-Bibliotheken, die QUIC unterstützen, weiterhin herunterladen und selbst kompilieren. Obwohl der Code als experimentell gekennzeichnet ist, berichten mehrere Mitglieder der Community, dass sie nginx-quic erfolgreich in Produktionsumgebungen einsetzen.
Unsere Hauptmotivation für die Veröffentlichung vorkompilierter Binärdateien besteht darin, das Testen von NGINX mit QUIC+HTTP/3 schneller und einfacher zu machen. Dank der Binärdateien entfällt die Kompilierung aus dem Quellcode, und sie können mit gängigen Paketverwaltungsprogrammen installiert werden.
Zum Zeitpunkt der Erstellung dieses Artikels unterstützt OpenSSL, der De-facto-Standard für quelloffenes SSL/TLS, QUIC nicht. Daher erstellen wir die Binärdistributionen mit einem quictls-Bibliothekspaket, das automatisch als Abhängigkeit installiert wird. Wir haben uns für quictls entschieden, weil es derzeit die beste Kombination aus Stabilität, Kompatibilität und Funktionsumfang bietet.
Installationsanweisungen für die Binärdistribution finden Sie auf der NGINX QUIC-Website.
NGINX für QUIC+HTTP/3 konfigurieren
Für die Konfiguration von NGINX für QUIC+HTTP/3 gibt es mehrere neue Direktiven. Diese lassen sich jedoch problemlos mit Direktiven für HTTP/1.1 und HTTP/2 in vorhandenen Konfigurationsblöcken für virtuelle Server (server{}) kombinieren.
Für die einfachste funktionsfähige Konfiguration müssen Sie lediglich drei Direktiven in den Block server{} (und den untergeordneten Block location{}) aufnehmen:
| Direktive | Beschreibung |
|---|---|
listen 443 quic reuseport; | Fügen Sie eine neue Der Parameter |
ssl_protocols TLSv1.3; | Nehmen Sie TLS 1.3 in die Liste der akzeptierten Protokolle auf, da dies für QUIC erforderlich ist. (Diese Direktive ist wahrscheinlich bereits in der Konfiguration vorhanden; fügen Sie sie andernfalls hinzu.) Um alle gängigen Browser zu unterstützen, müssen Sie wahrscheinlich auch ältere TLS-Versionen aufnehmen. Informationen zur Browserunterstützung für TLS 1.3 finden Sie unter Can I use TLS 1.3? |
add_header Alt-Svc 'h3=":$server_port"; ma=86400'; | Fügen Sie diese Direktive hinzu, damit NGINX einen Antwort-Header hinzufügt, der dem Browser mitteilt, dass ein Upgrade auf QUIC verfügbar ist und über welchen Port die Verbindung hergestellt werden soll. Üblicherweise ist der Port (hier durch die Variable Der Wert von |
Hier ist ein Beispiel für einen server{}-Block:
server { # for better compatibility we recommend
# using the same port number for QUIC and TCP
listen 443 quic reuseport; # QUIC
listen 443 ssl; # TCP
ssl_certificate certs/example.com.crt;
ssl_certificate_key certs/example.com.key;
ssl_protocols TLSv1.3;
location / {
# advertise that QUIC is available on the configured port
add_header Alt-Svc 'h3=":$server_port"; ma=86400';
#proxy_pass <upstream_group>;
#root /<root_directory>;
}
}Es gibt mehrere neue optionale HTTP/3-bezogene Direktiven und Variablen (die im Codeausschnitt nicht dargestellt sind), darunter:
$http3– (Variable) Wird aufh3gesetzt, wenn die Anfrage während einer HTTP/3-Sitzung gesendet wird (andernfalls ist die Variable eine leere Zeichenfolge).quic_retry– (Direktive) Wenn aufongesetzt, weist diese Direktive NGINX an, eine QUIC-Retry-Nachricht an den Anfragenden zurückzusenden, in der die zu verwendende neue Verbindungs-ID angegeben ist, um die IP-Adresse des Anfragenden zu validieren. Das QUIC-Retry-Paket gleicht teilweise aus, dass ein TCP-Drei-Wege-Verbindungsaufbau nicht zur Validierung der Verbindung verwendet werden kann, da QUIC über UDP ausgeführt wird.ssl_early_data– (Direktive) Wenn aufongesetzt, wird NGINX angewiesen, Anwendungsdaten in der ersten Anfrage zu akzeptieren, die ein Client über eine neue TLS‑1.3-Verbindung sendet, sofern zuvor bereits eine Verbindung von diesem Client bestand. Dies wird als Verbindungswiederaufnahme ohne Umlaufzeit (0‑RTT) bezeichnet. Die Unterstützung für das Senden von „Early Data“ ist eine Funktion von TLS 1.3 und trägt zur Leistungssteigerung von QUIC+HTTP/3 bei, da die zusätzlichen Nachrichtenumlaufzeiten entfallen, die für einen TLS-Handshake erforderlich sind.Hinweis: Die 0‑RTT-Verbindungswiederaufnahme kann ein Sicherheitsrisiko darstellen, da die Early Data Replay-Angriffen ausgesetzt sind, wenn sie eine andere HTTP-Anfragemethode alsGETenthalten. Weitere Informationen finden Sie im Abschnitt über TLS 1.3 in Ankündigung von NGINX Plus R17 in unserem Blog.
Das Diagramm verdeutlicht, wie die Wiederaufnahme einer Verbindung mit 0‑RTT bei QUIC+HTTP/3 die Leistung verbessert, da der Client bereits in seiner ersten Nachricht eine HTTP-Anfrage senden kann, wenn er eine QUIC-Verbindung zu NGINX wieder aufnimmt. Bei TCP mit TLS hingegen muss der Client einen neuen TLS-Handshake mit NGINX durchführen, um eine sichere Verbindung herzustellen, was mehrere zusätzliche Roundtrips erfordert.

Informationen zu allen neuen Direktiven und Variablen finden Sie im Abschnitt „3. Konfiguration“ der nginx-quic-README.
NGINX mit QUIC+HTTP/3 testen
Wie bereits erwähnt, besteht einer unserer Beweggründe für die Veröffentlichung vorkompilierter Binärdateien darin, einfacher testen zu können, ob NGINX HTTP/3-Datenverkehr korrekt verarbeitet. Für einfache Tests über die Befehlszeile können Sie curlcurl mit HTTP/3-Unterstützung kompilieren oder einen vorkompilierten Container verwenden. Darüber hinaus unterstützen neuere Versionen der meisten Browser QUIC+HTTP/3.
Um zu überprüfen, ob Ihre QUIC-fähige Website HTTP/3-Verbindungsanfragen von Browsern verarbeitet, können Sie mit den Entwicklertools eines Browsers die von NGINX zurückgegebenen HTTP-Header untersuchen. Die QUIC+HTTP/3-Implementierung funktioniert ordnungsgemäß, wenn NGINX den Alt-Svc-Header, der weiter oben erläutert wurde, in seine Antwort auf die erste HTTP-Anfrage des Browsers über TCP aufnimmt.
Daraufhin stellt ein QUIC-fähiger Browser über den in der Alt-Svc-Direktive angegebenen Port eine QUIC-Verbindung her, und nachfolgende HTTP-Anfragen und -Antworten werden über QUIC übertragen. Eine weitere Möglichkeit, die Verwendung von QUIC+HTTP/3 zu überprüfen, besteht darin, eine weitere add_header-Direktive hinzuzufügen, die den Wert eines benutzerdefinierten HTTP-Headers auf das von der Variable $server-protocol erfasste Protokoll setzt. Sie können verfolgen, wie sich der Wert des Headers von HTTP/1.x vor dem Aufbau der QUIC-Verbindung zu HTTP/3.0 ändert, sobald QUIC verwendet wird.
Hier ist ein Beispiel für einen location-Block, in dem der benutzerdefinierte HTTP-Header X-protocol lautet:
location / { # advertise that QUIC is available on the configured port
add_header Alt-Svc 'h3=":$server_port"; ma=86400';
# signal whether we are using QUIC+HTTP/3
add_header X-protocol $server_protocol always;
#proxy_pass <upstream_group>;
#root /<root_directory>;
}Alternativ gibt es Tools wie die Chrome-Erweiterung „HTTP Indicator“, die das verwendete Protokoll visuell anzeigen. (Beachten Sie, dass dies keine Empfehlung für eine Browser-Erweiterung darstellt. Sie müssen selbst prüfen, ob mögliche Sicherheitsrisiken einer Erweiterung unter Ihren jeweiligen Umständen vertretbar sind.)
Wie geht es weiter?
Wir werden unsere Lösung für QUIC+HTTP/3 weiterentwickeln und in den kommenden Wochen weitere Beispiele für NGINX-Optimierungen bereitstellen. Teilen Sie uns in der Zwischenzeit bitte die Ergebnisse Ihrer eigenen Tests mit, damit wir sie bei unseren Entscheidungen berücksichtigen können. Ihr Feedback können Sie über die NGINX-Entwickler-Mailingliste und den Kanal #quic‑http3 auf NGINX Community Slack mit uns teilen.
Um über Neuigkeiten zu unserer Arbeit an QUIC+HTTP/3 auf dem Laufenden zu bleiben, einschließlich des nächsten wichtigen Meilensteins – der Zusammenführung des nginx-quic-Repositorys mit dem Mainline-Branch von NGINX Open Source –, abonnieren Sie die NGINX-Ankündigungs-Mailingliste.
Webinar ansehen
Wir möchten Sie außerdem zur Teilnahme an unserem bevorstehenden Webinar einladen: „NGINX und QUIC+HTTP/3 in der Praxis“ am Mittwoch, den 19. April 2023:
- Nordamerika – 10:00 Uhr PST
- EMEA – 11:00 Uhr MEZ
- APCJ – 10:00 Uhr SGT
Über den Autor

Ähnliche Blogbeiträge
Die Zukunft von NGINX: Zurück zu unseren Open-Source-Wurzeln
Beim NGINX Sprint 2022 besinnen wir uns auf unsere Open-Source-Wurzeln. Erfahren Sie mehr über die Initiativen, die wir im kommenden Jahr verfolgen, und teilen Sie uns mit, was Sie sich wünschen.

Ein Leitfaden zur Auswahl eines Ingress-Controllers, Teil 1: Ermitteln Sie Ihre Anforderungen
Ein Ingress-Controller kann eines der leistungsstärksten Tools in Ihrem Kubernetes-Stack sein. Erfahren Sie, wie Sie Ihre Ingress-Anforderungen ermitteln, um die beste Option auszuwählen.
Bereitstellung des NGINX Ingress Controllers auf Amazon EKS: So haben wir getestet
Wir haben kürzlich den Lösungsleitfaden zum NGINX Ingress Controller um Empfehlungen zur Dimensionierung für Amazon Elastic Kubernetes Service (EKS) ergänzt. In diesem Blogbeitrag erläutern wir, wie wir diese Empfehlungen erarbeitet haben, und stellen Ihnen alle Informationen zur Verfügung, die Sie benötigen, um selbst ähnliche Tests durchzuführen.

Protokollierung des Datenverkehrs zwischen NGINX und Upstream-Servern bei CDN77
Bei der Fehlersuche bei Datenverkehrsproblemen zwischen NGINX und Upstream-Servern konnte CDN77 die benötigten Daten nur aus dem Fehlerprotokoll mit aktivierter Debug-Ausgabe beziehen, was die Leistung beeinträchtigt und riesige Dateien erzeugt. Daher entwickelte das Team ein neues benutzerdefiniertes Modul, das ausschließlich die benötigten Daten protokolliert.
Ankündigung von NGINX Plus R16
NGINX Plus R16 ist eine einheitliche, elastische Ingress- und Egress-Schicht für Anwendungen, die die Funktionen eines Load Balancers, API-Gateways und einer WAF vereint und neue Features wie clusterfähige Ratenbegrenzung, Schlüssel-Wert-Speicher, „Random with Two Choices“, verbessertes UDP-Load-Balancing und vieles mehr bietet.
5 Gründe für den Umstieg auf softwarebasiertes Load Balancing
Entdecken Sie fünf Gründe für den Wechsel zu einem softwarebasierten Load Balancer wie NGINX Plus, darunter Kosteneinsparungen, die Einführung von DevOps und eine einheitliche Lösung für alle Umgebungen.