BLOG | NGINX

Ankündigung von NGINX Plus R32

NGINX-Teil-von-F5-horiz-schwarz-Typ-RGB
Prabhat Dixit Miniaturbild
Prabhat Dixit
Veröffentlicht am 28. Mai 2024

Wir freuen uns, die Verfügbarkeit von NGINX Plus Release 32 (R32) bekannt zu geben. NGINX Plus basiert auf NGINX Open Source und ist der einzige All-in-One-Software-Webserver, Load Balancer, Reverse-Proxy, Inhaltscache und API-Gateway.

Zu den neuen und erweiterten Funktionen in NGINX Plus R32 gehören:

  • Zwischenspeichern von SSL-Zertifikaten – NGINX Plus R32 führt erhebliche Verbesserungen der Startzeit und Speichernutzung von NGINX bei Konfigurationen mit einer großen Anzahl von Standorten mit wiederholten SSL-Zertifikat-/Schlüsselpaaren ein.
  • Stream_pass-Modul – NGINX Plus R32 ermöglicht es dem Stream-Modul jetzt, als Router zu fungieren, sodass Verbindungen bedingt vom Stream-Modul an andere Module wie http, Mail oder zurück zum Stream selbst weitergeleitet werden können.
  • Offizielle NGINX Plus-Containerimages – NGINX Plus R32 führt die Verfügbarkeit offizieller NGINX Plus-Containerimages für privilegierte und nicht privilegierte Containerlaufzeiten ein. Darüber hinaus werden beide Bereitstellungsmethoden mit optionalen Container-Images geliefert, die NGINX Agent enthalten, einen Begleit-Daemon, der eine nahtlose Integration mit NGINX-Management-Plane-Lösungen ermöglicht.

Abgerundet wird die Version durch neue Funktionen und Fehlerbehebungen, die von NGINX Open Source übernommen wurden, sowie Updates für das NGINX JavaScript-Modul.

Wichtige Verhaltensänderungen

Notiz: Wenn Sie von einer anderen Version als NGINX Plus R31 aktualisieren, lesen Sie unbedingt den Abschnitt „Wichtige Verhaltensänderungen“ in früheren Ankündigungsblogs für alle Versionen zwischen Ihrer aktuellen und dieser.

Abschaffung des OpenTracing-Moduls

Das in NGINX Plus R18 eingeführte OpenTracing-Modul wird in NGINX Plus R34 nicht mehr unterstützt und zur Entfernung markiert. Zugehörige Pakete werden bis dahin mit allen NGINX Plus-Versionen verfügbar gemacht. Wir empfehlen dringend, die Verwendung des OpenTracing-Moduls durch das in NGINX Plus R29 eingeführte OpenTelemetry-Modul zu ersetzen.

Entfernung des ModSecurity-Moduls

Der Support für das ModSecurity-Modul endete am 31. März 2024. Daher wurden die Modsec-Pakete aus dem NGINX Plus-Repository entfernt und werden in Zukunft nicht mehr im NGINX Plus-Repository verfügbar sein.

PGP-Schlüsselaktualisierung

NGINX Open Source- und NGINX Plus-Pakete werden mit einem PGP-Schlüssel signiert. Dieser Schlüssel läuft am 16. Juni 2024 ab. Wir haben das Ablaufdatum des Schlüssels aktualisiert, sodass vorhandene Pakete auch nach dem 16. Juni 2024 weiterhin verifiziert werden können. Wir werden neue Schlüsselpaare generieren, um Pakete für kommende Versionen zu signieren.

Alle NGINX-Benutzer sollten den aktualisierten PGP-Schlüssel herunterladen und installieren, indem sie diese Schritte befolgen:

Unter Ubuntu/Debian:

wget -qO - https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Unter RHEL/CentOS:

sudo rpm -e gpg-pubkey-7bd9bf62-5762b5f8
sudo rpm --import https://nginx.org/keys/nginx_signing.key

Sie können Ihre Softwaresignaturen nach dem 16. Juni 2024 nicht mehr verifizieren, bis Sie Ihren Schlüssel aktualisieren.

Zukünftige Verpackungs- und Veröffentlichungsrichtlinien

In zukünftigen NGINX Plus-Versionen werden wir unsere Verpackungs- und Veröffentlichungsrichtlinien optimieren. NGINX Plus wird nur auf den neuesten Versionen unterstützter Betriebssystemdistributionen erstellt und getestet. Wenn Sie NGINX Plus auf älteren Distributionen installieren, schlägt Ihr Paketmanager möglicherweise vor, die abhängigen Bibliotheken und Pakete zu aktualisieren.

Änderungen an der Plattformunterstützung

Die folgenden Änderungen wurden an unterstützten Plattformen in dieser Version vorgenommen.

Neue unterstützte Betriebssysteme:

  • Ubuntu 24.04

Ältere Betriebssysteme entfernt:

  • FreeBSD 12, das am 31. Dezember 2023 das Ende der Lebensdauer erreichte

Ältere Betriebssysteme, die veraltet sind und deren Entfernung in NGINX Plus R33 geplant ist:

  • CentOS7/RHEL7/Oracle Linux 7
  • Alpine Linux 3.16

Neue Features im Detail

SSL-Zertifikat-Caching zur Verbesserung des NGINX-Ladeverhaltens

Bisher lud NGINX jedes Mal ein Zertifikat, einen Schlüssel oder eine Zertifikatssperrliste, wenn in der NGINX-Konfiguration darauf verwiesen wurde. Dies bedeutete, dass mehrere Verweise auf dasselbe Objekt zu einer gleichen Anzahl von Neuladungen dieses Objekts führten. Diese Latenz würde sich beim Erben von Anweisungen wie Listen vertrauenswürdiger Zertifikate noch verstärken. Unter bestimmten Bedingungen würde dieses Verhalten die Startzeit von NGINX erheblich beeinträchtigen und könnte große Mengen an Speicher zum Speichern von Konfigurationen erfordern.

Mit dem neuen Verhalten verweisen SSL-Direktiven jetzt auf zwischengespeicherte Zertifikatsdateien und zugehörige Objekte. Dadurch werden der Speicherbedarf und die Ladezeiten für Konfigurationen, die wiederholt auf dieselben Zertifikatsobjekte verweisen, drastisch reduziert. Der Vorteil zeigt sich am deutlichsten in Fällen mit großen NGINX-Konfigurationen, in denen über eine große Anzahl von Standortblöcken auf eine kleine Gruppe vertrauenswürdiger Zertifikate verwiesen wird.

Hier ist eine Visualisierung der Verbesserung der Ladezeit, wobei NGINX mit ungefähr 5400 Standortblöcken (oberste Ebene und verschachtelt) und 878 Zertifikaten konfiguriert ist.

Verbesserung der Ladezeit

Beachten Sie den deutlichen Rückgang der Ladezeiten auf der rechten Seite des Diagramms, wo die durchschnittliche Ladezeit von etwa 40 Sekunden vor der Änderung auf etwa 6 Sekunden unter dem neuen Verhalten sinkt.

Verbindungen vom Stream-Modul an andere Module weitergeben

NGINX Plus R32 übernimmt eine Funktion von NGINX Open Source 1.25.5 , die NGINX eine neue Ebene der Konfigurierbarkeit hinzufügt. Insbesondere kann das NGINX- Stream- Modul jetzt als Router fungieren und als Proxy dienen, mit der Fähigkeit, Verbindungen vom Stream-Kontext an andere Kontexte wie http, Mail oder an einen separaten virtuellen Server innerhalb des Stream-Kontexts selbst weiterzuleiten.

Diese Funktionalität ist als Teil des in dieser Version eingeführten Moduls ngx_stream_pass_module verfügbar. Das Modul verfügt über eine einzelne Direktive „pass“, mit der die Adresse angegeben werden kann, an die Client-Verbindungen weitergeleitet werden sollen. Die Adresse kann durch eine Kombination aus IP-Adresse und Port, einen Socket-Pfad oder durch NGINX-Variablen angegeben oder referenziert werden.

Mit dieser Funktion können Kunden, die ihren gesamten Datenverkehr über einen einzigen L4-Endpunkt laufen lassen möchten, SSL-Verbindungen jetzt im L4-Streamkontext beenden und sie an andere Module (http, E-Mail) oder andere virtuelle Server innerhalb des Streamkontexts weiterleiten. Darüber hinaus können SSL-Verbindungen basierend auf Servernamen oder Protokollen bedingt beendet werden, während der verbleibende Datenverkehr an einen anderen Ort umgeleitet wird. Dadurch wird eine Reihe neuer Konfigurationsmöglichkeiten für die Verwaltung des Datenverkehrs von einem einzelnen Endpunkt aus freigeschaltet.

Der folgende Konfigurationsausschnitt beendet SSL-Verbindungen im Stream-Modul und übergibt sie bedingt an den HTTP-Kontext oder einen anderen virtuellen Server im Stream-Kontext, basierend auf dem angeforderten Servernamen.

http {
Server {
abhören 8000;

Standort / {
return 200 foo;
}
}
}

Stream {
Map $ssl_server_name $pass_port {
foo.example.com 8000;
Standard 9001;

}

Server {
abhören 9000 ssl;

ssl_Zertifikat domain.crt;
ssl_Zertifikatsschlüssel domain.key;

Pass 127.0.0.1:$pass_port;
}
Server{
abhören 9001;
return bar\n;
}

}

In diesem Beispiel werden alle SSL-Verbindungen am Streamserver-Block beendet. Abhängig vom Servernamen in der eingehenden Anforderung werden Verbindungen entweder an den HTTP-Server weitergeleitet, der auf Port 8000 lauscht, oder an den virtuellen Stream-Server, der auf Port 9001 lauscht.

Eine weitere Anwendung des Moduls betrifft Anwendungsfälle, in denen ein Drittanbietermodul die SSL-Terminierung nicht unterstützt. In solchen Szenarien kann das Stream_pass-Modul TLS-verschlüsselte Verbindungen beenden, bevor sie an das Drittanbietermodul weitergeleitet werden.

Dieses Beispiel zeigt, wie das RTMP-Modul , das SSL nativ nicht unterstützt, das Stream_Pass-Modul verwenden kann, um TLS-verschlüsselten Datenverkehr zu akzeptieren.

rtmp {
Server {
abhören 1935;#rtmp

Anwendung foo{

live auf;
}
}
}

Stream {
Server {
abhören 1936 ssl; #rtmps

SSL-Zertifikat domain.crt;
SSL-Zertifikatschlüssel domain.key;

Pass 127.0.0.1:1935;
}
}

In diesem Konfigurationsausschnitt wird die SSL-Verbindung im Streamserver-Block beendet und an das RTMP übergeben. Für das RTMP-Modul erscheint die Verbindung unverschlüsselt, sodass keine zusätzlichen Anpassungen oder Verarbeitungsaufwände zur Unterstützung von SSL-Verbindungen erforderlich sind.

NGINX Plus-Containerbilder

NGINX Plus R32 beinhaltet die offizielle Verfügbarkeit von NGINX Plus-Containerimages für die privilegierte und nicht privilegierte Ausführung von NGINX Plus. Beide Containertypen werden auch mit optionalen Installationen von NGINX Agent bereitgestellt, um eine einfache Verbindung zu von NGINX unterstützten Verwaltungsebenen zu ermöglichen. Die Bilder können aus dem NGINX-Register heruntergeladen werden, verfügbar unter: private-registry.nginx.com. Befolgen Sie diese Anweisungen , um mit Ihrem NGINX Plus-Zertifikat und -Schlüssel oder JSON Web Token (JWT) auf das Image zuzugreifen.

Weitere Verbesserungen und Fehlerbehebungen in NGINX Plus R32

Bugfix im MQTT Modul

  • Fehlerhafte Pakete bei Verwendung der Standardeigenschaften: Diese Version enthält eine Lösung für ein Problem, das zu fehlerhaften Paketen im Message Queuing Telemetry Transport (MQTT)-Modul führte, das in NGINX Plus R29 eingeführt wurde . Zuvor wurde das Eigenschaftenfeld (1 Byte) bei der Länge des ausgehenden Pakets nicht berücksichtigt, wenn das Eigenschaftenfeld vorhanden war und Standardwerte für alle Eigenschaften in der MQTT Connect-Nachricht enthielt. Dies führte dazu, dass die Paketlänge 1 Byte kürzer als erwartet war und ein fehlerhaftes Paket entstand. Dieser Fix in R32 behebt dieses Problem.

Bugfix im zone_sync Modul

  • Speicherverlust beim Neuladen der Konfiguration: Bisher wurden für ausstehende Warteschlangensynchronisierungsvorgänge Kettenglieder verwendet, die aus einem bestimmten Pool zugewiesen wurden, der nie freigegeben wurde. Dies führte zu Speicherlecks im Master sowie allen Arbeitsprozessen. Der Fix in dieser Version greift auf eine frühere Zonensynchronisierungsimplementierung zurück, die einen Zykluspool für die ausstehende Warteschlange verwendet.

Sicherheitsfixes

Die folgenden potenziellen Sicherheitsprobleme wurden in der experimentellen HTTP3/QUIC-Implementierung identifiziert und behoben.

  • Heap-Überlauf beim Schreiben ( CVE-2024-32760 ): Nicht offengelegte HTTP/3-Encoder-Anweisungen können dazu führen, dass NGINX-Arbeitsprozesse beendet werden oder andere mögliche Auswirkungen haben.
  • Stapelüberlauf/Verwendung nach Freigabe ( CVE-2024-31079 ): Nicht offengelegte HTTP/3-Anfragen können dazu führen, dass NGINX-Arbeitsprozesse beendet werden oder andere mögliche Auswirkungen haben. Dieser Angriff erfordert, dass eine Anforderung zu einem bestimmten Zeitpunkt während des Verbindungsabbaus erfolgt, da der Angreifer darauf keine Einsicht und nur begrenzten Einfluss hat.
  • Nullzeiger-Dereferenzierung mit leerem Header ( CVE-2024-35200 ): Nicht offengelegte HTTP/3-Anfragen können dazu führen, dass NGINX-Arbeitsprozesse beendet werden oder andere mögliche Auswirkungen haben.
  • Speicheroffenlegung während des QUIC-Handshakes ( CVE-2024-34161 ): Wenn die Netzwerkinfrastruktur eine Maximum Transmission Unit (MTU) von 4096 oder höher ohne Fragmentierung unterstützt, können nicht offengelegte QUIC-Nachrichten dazu führen, dass NGINX-Arbeitsprozesse beendet werden oder zuvor freigegebener Speicher verloren geht.

Von NGINX Open Source übernommene Änderungen

NGINX Plus R32 basiert auf NGINX Open Source 1.25.5 und übernimmt funktionale Änderungen, Funktionen und Fehlerbehebungen seit der Veröffentlichung von NGINX Plus R31 (in NGINX 1.25.4 und 1.25.5).

Merkmale:

  • Virtuelle Server im Stream-Modul.
  • Das ngx_stream_pass_module.
  • Die Parameter „deferred“, „accept_filter“ und „setfib“ der Direktive „listen“ im Stream-Modul.
  • Erkennung der Cache-Zeilengröße für einige Architekturen.
  • Unterstützung für Homebrew auf Apple Silicon.

Fehlerbehebungen:

  • Fehlerbehebungen und Verbesserungen für die Windows-Cross-Kompilierung.
  • Unerwartete Verbindungsschließung bei Verwendung von 0-RTT in QUIC.
  • Verbindungen mit ausstehenden AIO-Vorgängen werden möglicherweise beim ordnungsgemäßen Herunterfahren alter Arbeitsprozesse vorzeitig geschlossen.
  • Es werden keine Socket-Leak-Warnungen mehr protokolliert, wenn nach dem ordnungsgemäßen Herunterfahren alter Arbeitsprozesse ein schnelles Herunterfahren angefordert wurde.
  • Wenn AIO in einer Unteranforderung verwendet wurde, kann ein Socket-Deskriptorfehler, ein Socket-Leck oder ein Segmentierungsfehler in einem Arbeitsprozess (für SSL-Proxying) auftreten.
  • Ein Segmentierungsfehler kann in einem Arbeitsprozess auftreten, wenn SSL-Proxying zusammen mit der Direktive „image_filter“ verwendet wurde und Fehler mit dem Code 415 mit der Direktive „error_page“ umgeleitet wurden.
  • Fehlerbehebungen und Verbesserungen in HTTP/3.

Sicherheit:

  • Bei der Verwendung von HTTP/3 kann während der Verarbeitung einer speziell gestalteten QUIC-Sitzung ein Segmentierungsfehler in einem Arbeitsprozess auftreten ( CVE-2024-24989 , CVE-2024-24990 ).

Die vollständige Liste der neuen Änderungen, Funktionen, Fehlerbehebungen und Problemumgehungen aus den letzten Versionen finden Sie in der NGINX- Änderungsdatei .

Änderungen am NGINX JavaScript-Modul

NGINX Plus R32 enthält Änderungen aus der NGINX JavaScript (njs)-Modulversion 0.8.4. Nachfolgend finden Sie eine Liste wichtiger Änderungen in njs seit 0.8.2 (das war die Version, die mit NGINX Plus R31 ausgeliefert wurde).

Merkmale

  • Funktion: Der Server-Header für ausgehende Header kann festgelegt werden.
  • Besonderheit: QuickJS-Engine-Unterstützung in der CLI.

Änderungen

  • Verbesserung: Validierung von URI- und Args-Argumenten in r.subrequest().
  • Verbesserung: Prüft auf doppelte js_set-Variablen.

Fehlerbehebungen

  • Fehlerbehebung: Headers.set() behoben.
  • Fehlerbehebung: js_set mit Pufferwerten behoben.
  • Fehlerbehebung: Die Clear()-Methode eines gemeinsam genutzten Wörterbuchs wurde behoben, wenn kein Timeout angegeben ist.
  • Fehlerbehebung: Stub_status-Statistiken behoben, wenn js_periodic aktiviert ist.
  • Fehlerbehebung: Fehler beim Erstellen mit libxml2 2.12 und höher behoben.
  • Fehlerbehebung: Datumskonstruktor für Überläufe und mit NaN-Werten behoben.
  • Fehlerbehebung: Unterlauf in querystring.parse() behoben.
  • Fehlerbehebung: Mögliches Überlesen des Puffers in String.prototype.match() behoben.
  • Fehlerbehebung: Parsen von For-In-Schleifen behoben.
  • Fehlerbehebung: Das Parsen von Hexadezimal-, Oktal- und Binärliteralen ohne Ziffern wurde behoben.
  • Bugfix: Fehler behoben, der die Methode clear() eines gemeinsam genutzten Wörterbuchs ohne Timeout enthielt, eingeführt in0.8.3 .
  • Fehlerbehebung: r.send()-Methode eines gemeinsam genutzten Wörterbuchs ohne Timeout mit Buffer-Argument behoben.
  • Fehlerbehebung: atob() mit nicht aufgefüllten Base64-Zeichenfolgen behoben.

Eine umfassende Liste aller Funktionen, Änderungen und Fehlerbehebungen finden Sie im njs -Changelog .

Upgrade oder Testen von NGINX Plus

Wenn Sie NGINX Plus verwenden, empfehlen wir Ihnen dringend, so bald wie möglich auf NGINX Plus R32 zu aktualisieren. Zusätzlich zu all den tollen neuen Funktionen erhalten Sie auch mehrere zusätzliche Fehlerbehebungen und Verbesserungen, die es NGINX einfacher machen, Ihnen zu helfen, wenn Sie ein Support-Ticket erstellen müssen.

Wenn Sie kein NGINX Plus-Benutzer sind, empfehlen wir Ihnen, es auszuprobieren. Sie können es für Anwendungsfälle in den Bereichen Sicherheit, Lastausgleich und API-Gateway oder als vollständig unterstützten Webserver mit erweiterten Überwachungs- und Verwaltungs-APIs verwenden. Beginnen Sie noch heute mit einer kostenlosen 30-Tage-Testversion .


„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."