BLOG | NGINX

Ankündigung von NGINX Plus R30

NGINX-Teil-von-F5-horiz-schwarz-Typ-RGB
Prabhat Dixit Miniaturbild
Prabhat Dixit
Veröffentlicht am 15. August 2023

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

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

  • Native Unterstützung für QUIC+HTTP/3 NGINX Plus bietet jetzt offizielle Unterstützung für HTTP/3. Die Implementierung ist nicht von Bibliotheken von Drittanbietern abhängig, um die fehlende OpenSSL-TLS-Funktionalität bereitzustellen, die für die Bereitstellung von HTTP/3-Unterstützung über das QUIC-Protokoll erforderlich ist. Es verwendet eine vom NGINX-Team entwickelte OpenSSL-Kompatibilitätsschicht, um die Herausforderungen mit QUIC-TLS-Schnittstellen zu umgehen, die von OpenSSL nicht unterstützt werden.
  • Telemetrie der Verbindungen pro Worker Die Überwachung von Verbindungen auf der Ebene pro Worker wird jetzt unterstützt. Auf diese Weise können Benutzer die NGINX-Leistung optimieren, indem sie die Anzahl der Arbeitsprozesse regulieren und die Verbindungen für eine optimale Leistung effektiv unter den Arbeitsprozessen verteilen.
  • Diagnosepaket Das NGINX-Diagnosepaket sammelt alle zur Fehlerbehebung erforderlichen Daten in einer einzigen komprimierten Datei. Dies verbessert die Kommunikation zwischen NGINX Plus-Benutzern und dem F5-Support, erhöht die Effizienz und verkürzt die Bearbeitungszeit zur Problemlösung.

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 R29 aktualisieren, lesen Sie unbedingt den Abschnitt „Wichtige Verhaltensänderungen“ in früheren Ankündigungsblogs für alle Versionen zwischen Ihrer aktuellen und dieser.

Abschaffung der Direktive „listen … http2“

Die Direktive „listen … http2“ ist in NGINX 1.25.1 veraltet. Die NGINX-Konfigurationsprüfung mit nginx -t gibt eine entsprechende Warnung aus.  

nginx -t

nginx: [warn] die Direktive „listen ... http2“ ist veraltet, verwenden Sie stattdessen die Direktive „http2“ in etc/nginx/nginx.conf :15

nginx: die Syntax der Konfigurationsdatei /etc/nginx/nginx.conf ist in Ordnung

nginx: Test der Konfigurationsdatei /etc/nginx/nginx.conf ist erfolgreich

Allen bestehenden Benutzern dieser Anweisung wird dringend empfohlen, NGINX zu aktualisieren und die Anweisung http2 zu verwenden, die HTTP/2 auf Serverbasis aktiviert.

Ändern Sie dies:

hören Sie 443 SSL http2;

Hierzu:

443 SSL abhören;
http2 ein;

Nichtverfügbarkeit des GeoIP2-Moduls unter Amazon Linux 2

Frühere Versionen von NGINX Plus verwendeten die Bibliothek „libmaxminddb“ aus dem Amazon Linux 2 EPEL-Repository, um das GeoIP2-Modul zu erstellen. Das EPEL-Repository stellt diese Bibliothek nicht mehr bereit und ist auch nicht nativ von der Amazon Linux 2-Distribution aus zugänglich. Daher ist das Modul in NGINX Plus R30 nicht mehr verfügbar, da es keine praktikable Möglichkeit gibt, es für Amazon Linux 2 zu erstellen.

Änderungen an MQTT-Richtlinien

Die Direktive mqtt_rewrite_buffer_size , die zum Festlegen der Puffergröße zum Erstellen von MQTT-Nachrichten verwendet wird, wurde durch die Direktive mqtt_buffers ersetzt. Mit der neuen Direktive können Sie die Anzahl der Puffer festlegen, die pro Verbindung zugewiesen werden können, sowie die Größe jedes Puffers angeben.

Aktualisierte API-Version

Die Versionsnummer der NGINX Plus-API wurde von 8 auf 9 aktualisiert, um die Hinzufügung der in „Verbindungstelemetrie pro Worker“ beschriebenen Metriken pro Worker widerzuspiegeln. Frühere Versionsnummern funktionieren weiterhin, aber die Ausgabe enthält keine Metriken, die in späteren API-Versionen hinzugefügt wurden.

Änderungen an der Plattformunterstützung

Neue unterstützte Betriebssysteme:

  • Debian 12
  • Alpine 3.18

Ältere Betriebssysteme entfernt:

  • Alpine 3.14, das am 1. Mai 2023 das Ende seiner Lebensdauer (EOL) erreichte
  • Ubuntu 18.04, das am 26. April 2023 das Ende der Lebensdauer erreichte

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

  • Alpine 3.15, das im November 2023 EOL erreichen wird

Neue Features im Detail

Native Unterstützung für QUIC+HTTP/3

HTTP/3 über QUIC war eine mit Spannung erwartete Funktion, die von vielen unserer Unternehmenskunden angefordert wurde, und wir freuen uns, sie offiziell in NGINX Plus R30 einzuführen. Dies ist eine neue Technologie und Implementierung, auf die wir uns auch in zukünftigen Versionen konzentrieren werden. Wir empfehlen NGINX Plus-Benutzern, es zunächst in einer Nicht-Produktionsumgebung auszuprobieren und uns wertvolles Feedback zu geben.

NGINX Plus verlässt sich für sichere Kommunikation und kryptografische Funktionen auf OpenSSL und nutzt die SSL/TLS-Bibliotheken, die mit den Betriebssystemen mitgeliefert werden. Da die TLS-Schnittstellen von QUIC zum Zeitpunkt dieser Veröffentlichung jedoch nicht von OpenSSL unterstützt werden, werden Bibliotheken von Drittanbietern benötigt, um die fehlende TLS-Funktionalität bereitzustellen, die von HTTP/3 benötigt wird.

Um dieses Problem zu lösen, hat das NGINX-Team eine OpenSSL-Kompatibilitätsschicht entwickelt, wodurch die Notwendigkeit entfällt, TLS-Bibliotheken von Drittanbietern wie quictls, BoringSSL und LibreSSL zu erstellen und bereitzustellen. Dies hilft dabei, das End-to-End-QUIC+HTTP/3-Erlebnis in NGINX zu verwalten, ohne die Belastung einer benutzerdefinierten TLS-Implementierung oder die Abhängigkeit von Zeitplänen und Roadmaps von Bibliotheken von Drittanbietern. Wir planen, die OpenSSL-Kompatibilitätsschicht in zukünftigen Versionen um weitere Funktionen und Optionen zu erweitern, beispielsweise um die Unterstützung von 0-RTT.

Hier ist die QUIC+HTTP/3-Konfiguration:
   

http {
        log_format quic '$remote_addr - $remote_user [$time_local] '
                         '"$request" $status $body_bytes_sent '
                        '"$http_referer" "$http_user_agent" "$http3"';
         access_log logs/access.log quic;

       server {
             # für bessere Kompatibilität wird empfohlen
            # denselben Port für quic und https zu verwenden
            listen 8443 quic reuseport;
             listen 8443 ssl;

             ssl_certificate     certs/example.com.crt;
            ssl_certificate_key certs/example.com.key;

             location / {
                # erforderlich, damit Browser sie zum Quick-Port weiterleiten
                 add_header Alt-Svc 'h3=":8443"; ma=86400';
             }
        }
    }

Die QUIC+HTTP/3-Unterstützung in NGINX Plus R30 ist als einzelne Binärdatei verfügbar – im Gegensatz zur experimentellen HTTP/3-Unterstützung, die in NGINX Plus R29 eingeführt wurde und für die es eine separate Binärdatei für Nginx Quic gab. Diese Verbesserung erleichtert die Bereitstellung der Funktionalität in Ihrer Umgebung.

Notiz: Mit NGINX Plus R30 beenden wir den Support und die Updates für die eigenständige QUIC-Binärdatei und planen, sie später in diesem Jahr als Download-Option zu entfernen.

Telemetrie der Verbindung pro Mitarbeiter

NGINX Plus-Benutzer können jetzt die Gesamtzahl der Verbindungen pro Arbeitsprozess überwachen, um die Direktive „worker_connections“ entsprechend anzupassen. Diese Verbesserung gibt den Benutzern einen besseren Einblick in die Verteilung der Verbindungen unter den Mitarbeitern. Durch die Möglichkeit, Worker-Verbindungen zu optimieren, können Sie Ihre NGINX-Bereitstellung auch besser beurteilen.

Die Verbindungsmetriken pro Worker sind über die REST-API verfügbar. Um Verbindungsmetriken pro Worker abzurufen, verwenden Sie den Endpunkt …/api/9/workers .

Um Verbindungsmetriken für einen einzelnen Worker abzurufen, verwenden Sie die …/api/9/workers/<Arbeitnehmer-ID> Endpunkt. Die Worker-ID hat einen 0-basierten Index.

Hier ist eine Beispielantwort:

{
      {
          "Ausweis": 0,
        "pid": 2346,
        „Verbindungen“: {
            „akzeptiert“: 1,
            „fallengelassen“: 0,
            „aktiv“: 1,
            „Leerlauf“: 0
        },
        „http“: {
             „Anfragen“: {
               „Gesamt“: 15,
                „aktuell“: 1
            }
        }
    },
    {
        "id": 1,
        "pid": 1234,
        „Verbindungen“: {
            „akzeptiert“: 3,
            „fallengelassen“: 0,
            „aktiv“: 1,
            „Leerlauf“: 0
        },
        „http“: {
             „Anfragen“: {
               „Gesamt“: 15,
                „aktuell“: 1             }         }     },     ... }

Die Verbindungsmetriken pro Worker sind im NGINX Plus Live Activity Monitoring Dashboard verfügbar, wie unten gezeigt. Greifen Sie unter demo.nginx.com auf eine Live-Demo dieser Funktion zu.

NGINX Plus Live Activity Monitoring Dashboard mit den folgenden Informationen zu NGINX Plus-Verbindungen und -Anfragen

Das Dashboard zeigt die folgenden Informationen zu NGINX Plus-Verbindungen und -Anfragen.

Verbindungen:

  • Akzeptierte Verbindungen pro Worker
  • Aktive Verbindungen pro Worker
  • Inaktive Verbindungen pro Worker
  • Unterbrochene Verbindungen pro Worker

Anfragen:

  • Aktuelle Anfragen pro Mitarbeiter
  • Gesamtzahl der Anfragen pro Mitarbeiter
  • Anfragen/Sekunde pro Worker

Diagnosepaket

Um die Bearbeitungszeit zur Problemlösung zu verkürzen, optimiert das Diagnosepaket den Prozess der Erfassung der Daten, die zur Fehlerbehebung in Ihrer NGINX-Umgebung erforderlich sind. Das Diagnosepaket trägt auch dazu bei, Unstimmigkeiten und Verzögerungen zu vermeiden, die mit der manuellen Anforderung und Erfassung der zur Fehlerbehebung erforderlichen Informationen verbunden sind, und gestaltet so die Interaktion zwischen NGINX Plus-Kunden und dem F5-Support effizienter.

Das Diagnosepaket sammelt:

  • NGINX-Informationen – NGINX Plus-Version, Konfigurationen, Prozessinformationen, Module von Drittanbietern, Protokolle sowie API-Statistiken und -Endpunkte
  • Systeminformationen – Hostbefehle ( ps , lsof , vmstat usw.)
  • Serviceinformationensystemd usw.
  • NGINX Agent – Protokolle und Konfigurationen (falls vorhanden)
  • NGINX App Protect – Protokolle und Konfigurationen (falls vorhanden)
  • Support Package Log – Log mit einer Liste aller erfassten Dateien

Mit der Ergänzung des Diagnosepakets möchten wir den Benutzern Transparenz darüber bieten, welche Befehle das Skript im Paket ausführt und welche Daten erfasst werden. Weitere Informationen finden Sie auf der Seite zum NGINX Plus-Diagnosepaket .

Notiz: Die Verfügbarkeit des Diagnosepakets wird als Teil der aktuellen NGINX Plus R30-Version angekündigt, das Diagnosepaket ist jedoch nicht wirklich von der Version abhängig. Zukünftig planen wir, es auf der Grundlage Ihres Feedbacks und des F5-Supports zu aktualisieren, um den Prozess der Datenerfassung zur Fehlerbehebung zu verbessern.

Weitere Verbesserungen in NGINX Plus R30

MQTT-Optimierungen

Dank der Verbesserungen beim Speicherverbrauch des Filtermoduls „Message Queuing Telemetry Transport“ (MQTT) ist der Durchsatz jetzt um das Vier- bis Fünffache gestiegen.

Die Direktive mqtt_rewrite_buffer_size wurde entfernt. Stattdessen wird die neue Richtlinie mqtt_buffers <Anzahl> <Größe> wurde eingeführt, um anzugeben, wie viele Puffer das Modul pro Verbindung zuordnen darf, zusammen mit der Größe jedes Puffers. Die Standardanzahl der Puffer beträgt 100 und die Standardgröße jedes Puffers beträgt 1024 Bytes, was den Standardwert der Variable mqtt_buffers zu <100> <1024> macht.

DNS-Neuladeoptimierungen

NGINX Plus behält jetzt die Ablaufzeiten von DNS-Namen für dynamisch aufgelöste Upstream-Hosts über Neuladungen hinweg bei, sodass eine erneute Auflösung beim Neuladen der Konfiguration nicht mehr erforderlich ist. Vor diesem Update wurden DNS-Auflösungen für alle Upstreams ausgelöst. Mit diesem Update behält NGINX DNS-Auflösungen und Ablaufzeiten für alle Upstreams bei und löst DNS-Auflösungen beim Neuladen nur für neue oder geänderte Upstreams aus.

Diese Optimierung wirkt sich am stärksten auf NGINX-Umgebungen aus, die eine große Anzahl Upstream-Hosts enthalten. Wenn Ihre NGINX-Konfiguration 100 oder mehr Upstream-Hosts umfasst, sind die Optimierungen am deutlichsten.

Von NGINX Open Source übernommene Änderungen

NGINX Plus R30 basiert auf NGINX Open Source 1.25.1 und übernimmt Funktionsänderungen, Funktionen und Fehlerbehebungen seit der Veröffentlichung von NGINX Plus R29 (in NGINX 1.25.0 und 1.25.1).

Änderungen

  • Die Unterstützung für HTTP/2-Server-Push wurde entfernt. HTTP/2 Server_Push wurde nur minimal angenommen und konnte nur in sehr begrenzten Anwendungsfällen genutzt werden. (Gemäß IETF 102-Referenzdokumentation wurde es nur in 0,04 % der Sitzungen verwendet. Gemäß RFC 913 war es „schwierig, es effektiv zu nutzen.“) HTTP/2-Server-Push wurde in Chrome Version 106 deaktiviert . Im Rahmen dieser Änderung wurden die Anweisungen http2_push , http2_push_preload und http2_max_concurrent_pushes obsolet.
  • Die veraltete SSL- Direktive wird nicht mehr unterstützt. Die SSL- Direktive wurde in NGINX 1.15.0 verworfen und durch den SSL- Parameter der Listen-Direktive ersetzt. Die veraltete SSL-Direktive wurde jetzt entfernt.
  • Wie oben erwähnt, ist die Direktive „listen … http2“ veraltet. Benutzern wird empfohlen, stattdessen die Direktive http2 zu verwenden.
    • Bei SSL-Verbindungen mit OpenSSL v1.0.2h oder höher gilt: Wenn das HTTP/2-Protokoll im durch eine Server Name Identification (SNI) ausgewählten virtuellen Server aktiviert ist, wird es automatisch durch den Application Layer Protocol Negotiation (ALPN)-Rückruf ausgewählt.
    • Für ältere Versionen von OpenSSL ist das HTTP/2-Protokoll basierend auf der Standardkonfiguration des virtuellen Servers aktiviert.
    • Bei einfachen TCP-Verbindungen wird HTTP/2 jetzt automatisch vom HTTP/2-Präwort erkannt, wenn es im virtuellen Standardserver aktiviert ist. Wenn das Präwort nicht übereinstimmt, wird HTTP/0.9-1.1 angenommen.
  • Es wird Unterstützung für HTTP/2 über Cleartext TCP (h2c) und HTTP/1.1 auf demselben Abhörsocket hinzugefügt. Wenn ein Benutzer in der vorhandenen Implementierung einen h2c-Abhörsocket konfiguriert (z. B. „listen port_num http2“ ), können nur HTTP/2-Verbindungen hergestellt werden. Ein h2-Listening-Socket unterstützt sowohl HTTP/1.1 als auch HTTP/2 mit Protokollaushandlung über ALPN. In der vorhandenen Implementierung schlagen HTTP/1.1-Clients jedoch am Socket fehl, wodurch die Verwendung von HTTP Upgrade als Mittel zum Aushandeln des Protokolls verhindert wird. Diese Änderung ermöglicht die gleichzeitige Unterstützung von HTTP/1.1 und HTTP/2 auf einem einfachen TCP-Socket bei Verwendung von HTTP/2.
  • Die Vermeidung eines möglichen Pufferüberlaufs mit einigen $sent_http_* ist aktiviert. Ein Defekt in der Logik zur Auswertung von Multiheader- $sent_http_- Variablen führte zu potenziellen Pufferüberläufen, wenn bestimmte Elemente gelöscht wurden, aber in der verknüpften Liste verblieben. Dieses Problem trat auf, wenn Module von Drittanbietern zum Überschreiben von Multiheaderwerten verwendet wurden. Das Update führt verfeinerte Grenzwertprüfungen ein, die eine sicherere Handhabung und Auswertung dieser Variablen gewährleisten.

Merkmale

  • Vollständige HTTP/3-Unterstützung wurde hinzugefügt. Die Hauptversion von NGINX 1.25.0 führte Unterstützung für HTTP/3 ein und diese Unterstützung wurde in NGINX Plus R30 integriert. Die NGINX Plus R30-Implementierung weist im Vergleich zu den in NGINX Plus R29 bereitgestellten experimentellen Paketen die folgenden Änderungen auf:
  •  
    • Die Direktive quic_mtu wurde entfernt.
    • Der http3-Parameter der Listen- Direktive wurde entfernt.
    • QUIC-Unterstützung aus dem Stream-Modul entfernt
    • HTTP/3-Server-Push entfernt
    • Fehler beim Erstellen der OpenSSL-Kompatibilitätsschicht mit OpenSSL 3.2+ behoben

Fehlerbehebung

  • Segmentierungsfehler behoben, wenn die Zuweisung einer Studienliste mit regulären Ausdrücken (Regex) fehlschlägt.

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

Änderungen am NGINX JavaScript-Modul

NGINX Plus R30 enthält Änderungen aus der NGINX JavaScript (njs)-Modulversion 0.8.0.

Merkmale

  • Einführung globaler NGINX-Eigenschaften:
    ngx.build , ngx.conf_file_path , ngx.error_log_path , ngx.prefix , ngx.version , ngx.version_number und ngx.worker_id .
  • Einführung der Direktive js_shared_dict_zone für http und Stream , die die Deklaration eines zwischen Arbeitsprozessen gemeinsam genutzten Wörterbuchs ermöglicht.
  • ES13-kompatible Array-Methoden hinzugefügt: Array.from(), Array.prototype.toSorted(), Array.prototype.toSpliced(), Array.prototype.toReversed() .
  • ES13-kompatible TypedArray-Methoden hinzugefügt: %TypedArray%.prototype.toSorted(), %TypedArray%.prototype.toSpliced(), %TypedArray%.prototype.toReversed() .
  • CryptoKey-Eigenschaften in der WebCrypto-API hinzugefügt. Diese Eigenschaften wurden hinzugefügt: Algorithmus, extrahierbar, Typ, Verwendungen .

Änderungen

  • Die Sonderbehandlung verbotener Header in der Fetch API wurde entfernt in0.7.10 .
  • R.requestBody() wurde aus dem HTTP-Modul entfernt, da es in Version 0.5.0 veraltet war. Stattdessen sollte die Eigenschaft r.requestBuffer oder r.requestText verwendet werden.
  • r.responseBody() wurde aus dem HTTP-Modul entfernt, das in Version 0.5.0 veraltet war. Stattdessen sollte die Eigenschaft r.responseBuffer oder r.responseText verwendet werden.
  • Beim Filtern im HTTP- Modul wird eine Ausnahme in r.internalRedirect() ausgelöst.
  • Native Methoden werden mit dem Retval- Argument bereitgestellt. Diese Änderung unterbricht die Kompatibilität mit der C-Erweiterung für NJS und erfordert eine Änderung des Codes.
  • Nicht konforme, veraltete String-Methoden wurden entfernt. Die folgenden Methoden wurden entfernt: String.bytesFrom(), String.prototype.fromBytes(), String.prototype.fromUTF8(), String.prototype.toBytes(), String.prototype.toUTF8(), String.prototype.toString(Kodierung) .
  • Unterstützung für den Aufbau mit GNU Readline entfernt.

Fehlerbehebungen

  • R.status -Setter beim Filtern im HTTP- Modul behoben.
  • Einstellung des Location- Headers im HTTP- Modul behoben.
  • Abruf von сrypto.getRandomValues() behoben.
  • Die Auswertung berechneter Eigenschaftsnamen mit Funktionsausdrücken wurde korrigiert.
  • Fester impliziter Name für einen in Arrays deklarierten Funktionsausdruck.
  • Das Parsen von For-In-Schleifen wurde behoben.
  • Date.parse() mit ISO-8601-Format und UTC-Zeitversatz behoben.

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

Upgrade oder Testen von NGINX Plus

Wenn Sie NGINX Plus verwenden, empfehlen wir Ihnen dringend, so bald wie möglich auf NGINX Plus R30 zu aktualisieren. Zusätzlich zu den ganzen tollen neuen Funktionen erhalten Sie auch mehrere zusätzliche Fehlerbehebungen und Verbesserungen. Und wenn Sie auf dem neuesten Stand sind, kann NGINX Ihnen helfen, wenn Sie ein Support-Ticket erstellen müssen.

Wenn Sie NGINX Plus noch nicht ausprobiert haben, 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."