Heute veröffentlichen wir NGINX 1.19, die neueste Version von NGINX Open Source, dem beliebtesten Webserver im Internet . Diese Version markiert den Start des Entwicklungszweigs NGINX 1.19, nach der Veröffentlichung des stabilen Zweigs NGINX 1.18 im letzten Monat.
In diesem Blog besprechen wir das NGINX-Versionierungsschema, blicken zurück auf die Ereignisse während des Entwicklungszyklus von NGINX 1.17 und blicken voraus auf das, was uns mit NGINX 1.19 erwartet.
Bei NGINX pflegen wir zwei Zweige im NGINX Open Source-Code-Repository, genannt mainline und stable :
Bei NGINX Open Source bezieht sich das Wort „stabil“ auf Funktionalität und Aktualisierungshäufigkeit, nicht auf die Softwarequalität. Der stabile Zweig erhält während seines Lebenszyklus nie neue Funktionen und erhält normalerweise nur ein oder zwei Updates zur Fehlerbehebung.
Der stabile Zweig hat einen jährlichen Lebenszyklus. Jedes Jahr im April stellen wir den aktuellen stabilen Zweig ein. Danach werden keine weiteren Fehlerbehebungen mehr vorgenommen. Dies löst zwei Ereignisse aus:
NGINX Plus , die kommerzielle Version von NGINX, wird in einem separaten, privaten Code-Repository verwaltet. Es basiert immer auf der neuesten Version der NGINX-Hauptlinie, zusammengeführt mit den zusätzlichen proprietären Funktionen und Fähigkeiten in NGINX Plus. Zum Zeitpunkt des Schreibens ist die neueste Version NGINX Plus R21 , basierend auf NGINX 1.17.10.
Wir empfehlen grundsätzlich die Verwendung des Hauptzweigs. Hier stellen wir alle neuen Funktionen, Leistungsverbesserungen und Erweiterungen bereit. Wir führen für den Hauptzweig aktive Tests und eine Qualitätssicherung durch und als Quelle der NGINX Plus-Builds ist er vollständig für den Produktionseinsatz geeignet.
Wenn Sie sich über den Aufwand Gedanken machen, der mit der Überwachung des Hauptzweigs hinsichtlich neuer Funktionen und Fehlerbehebungen verbunden ist, dann bedeutet die Verwendung des stabilen Zweigs, dass Sie neue Funktionen nur einmal im Jahr und Fehlerbehebungen nur selten überprüfen müssen.
Der Entwicklungszyklus von NGINX 1.17 führte einige neue Funktionen und Verbesserungen ein, darunter Verbesserungen der Anforderungsrate und der Verbindungsbegrenzung in ngx_http_limit_req_module bzw. ngx_http_limit_conn_module , das Hinzufügen einer Direktive zur Authentifizierungsverzögerung zu ngx_http_core_module , die Einführung von Variablenunterstützung für die Direktive grpc_pass
und Variablen, die die Serveradresse und den Port mit dem PROXY-Protokoll erfassen, und mehr. Bevor wir uns die wichtigsten Verbesserungen im Detail ansehen, hier NGINX 1.17 in Zahlen:
Die Anweisungen „limit_rate“
und „limit_rate_after“
steuern die Bandbreite (Rate in Bytes pro Sekunde), mit der NGINX auf Anfragen antwortet. In NGINX 1.17.0 und höher kann der Parameter, der die Rate festlegt, eine Variable sein, die eine dynamische Steuerung basierend auf Attributen der Anforderung ermöglicht. Ein Beispiel finden Sie unter Dynamische Bandbreitensteuerung .
NGINX 1.17.1 hat mit der Direktive „limit_req_dry_run“
einen Dry-Run-Modus zur Begrenzung der Anforderungsrate hinzugefügt. Im Probelaufmodus erzwingt NGINX Plus keine Ratenbegrenzungen, verfolgt aber dennoch die Rate übermäßiger Anfragen in der gemeinsam genutzten Speicherzone und schreibt für jede Anfrage, die die konfigurierte Begrenzung überschreitet, einen Eintrag in das Fehlerprotokoll. So können Sie leichter bestimmen, welche Ratenbegrenzung für die Verkehrsmuster auf Ihrer Site angemessen ist. Weitere Einzelheiten finden Sie unter Testen der Ratenbegrenzungen im Probelaufmodus .
Um den Dry‑Run‑Modus noch nützlicher zu machen, wurde in NGINX 1.17.6 die Variable $limit_req_status
hinzugefügt, die in Zugriffsprotokolleinträge aufgenommen werden kann, um die Auswirkungen der Ratenbegrenzung auf die Anforderungsverarbeitung zu erfassen – insbesondere, ob eine Anforderung:
BESTANDEN
]VERZÖGERT
]ABGELEHNT
]DELAYED_DRY_RUN
]REJECTED_DRY_RUN
]NGINX 1.17.6 hat außerdem einen Dry‑Run‑Modus zur Verbindungsbegrenzung mit der Direktive limit_conn_dry_run
und die Variable $limit_conn_status
hinzugefügt, um zu erfassen, wann eine Verbindungsanforderung:
BESTANDEN
]ABGELEHNT
]REJECTED_DRY_RUN
]Eine Beispielkonfiguration finden Sie unter Verbesserungen der Verbindungsbeschränkung .
auth_delay-
DirektiveDie Direktive auth_delay
(hinzugefügt in NGINX 1.17.10) ermöglicht die verzögerte Verarbeitung nicht autorisierter Anfragen mit dem Statuscode 401
(Unbefugt)
an den Client zurückgesandt. Dadurch werden Timing-Angriffe bei der Verarbeitung von Zugriffsanfragen verhindert. Zu den verfügbaren Authentifizierungsmethoden gehören:
grpc_pass-
DirektiveIn NGINX 1.13.10 wurde native Unterstützung für gRPC-Verkehr hinzugefügt, einschließlich der Direktive grpc_pass
, die die Server angibt, an die NGINX gRPC-Anfragen weiterleitet. In NGINX 1.17.8 haben wir die Möglichkeit hinzugefügt, Domänennamen in die Serverkennung aufzunehmen, um die Suche zwischen Upstream-Servergruppen zu unterstützen. Wenn der Domänenname nicht gefunden wird, greift NGINX auf einen Resolver zurück, um Serveradressen zu identifizieren.
Das PROXY-Protokoll ermöglicht es einem Layer-4-Proxy, dem nächsten Proxy oder Load Balancer, der die Anfrage verarbeitet, ursprüngliche Client-Informationen bereitzustellen. Dies ist wichtig für Anwendungsfälle, in denen Sie die IP-Adresse des Clients kennen müssen – beispielsweise um die Anzahl der Verbindungen für jeden Client zu begrenzen (mithilfe der Direktive least_conn
). Diese Daten sind in der Variable $proxy_protocol_addr
( HTTP | Stream ) verfügbar.
Wenn mehrere Layer-4-Proxys eingesetzt werden, kann es für NGINX wichtig sein, die IP-Adresse und den Port des Proxyservers zu kennen, mit dem der Client ursprünglich verbunden war. Die Metadaten des PROXY-Protokolls enthalten diese Informationen, und NGINX 1.17.6 hat den HTTP- und Stream-Modulen die folgenden Variablen hinzugefügt, um sie zu erfassen:
Notiz: Die Variablen werden nur aufgefüllt, wenn Sie auch den Parameter „proxy_protocol“
in die Listen-
Direktive aufnehmen, um die Verarbeitung des PROXY-Protokolls zu ermöglichen.
proxy_upload_rate
und proxy_download_rate
hinzugefügtDie Anweisungen proxy_upload_rate
und proxy_download_rate
im Stream-Modul steuern die Rate, mit der NGINX Daten von einem Client bzw. einem Proxy-Server liest. In NGINX 1.17.0 und höher akzeptieren die Anweisungen einen variablen Parameter, sodass Sie zustandsspezifische Raten definieren können.
ioctl(FIONREAD)
hinzugefügtIn Linux-Systemen gibt der Systemaufruf ioctl()
die Anzahl der vom Hostgerät lesbaren Bytes an. NGINX 1.17.5 hat ioctl(FIONREAD)
hinzugefügt, um eine Schleife zu verhindern, wenn Daten schneller zum Socket-Puffer hinzugefügt werden, als NGINX sie lesen und verarbeiten kann. Wenn der Kernel die Anzahl der verfügbaren Bytes nicht bereitstellt, können wir diese Information mit ioctl(FIONREAD)
aus einem gefüllten Puffer abrufen.
internal_redirect
In NGINX 1.17.2 und höher kann der URI-
Parameter für die Funktion internal_redirect
im NGINX- Perl-Modul eine Escape-URI oder ein benannter Ort sein.
Die erste Version der NGINX 1.19-Hauptlinie erscheint in Kürze. NGINX 1.19.0 beinhaltet Unterstützung für QUIC (HTTP/3), das nächste bedeutende Update der Transportprotokolle für die Kommunikation zwischen Clients und Websites, Anwendungen und APIs.
Wenn Sie die erweiterten Funktionen in NGINX Plus ausprobieren möchten, starten Sie noch heute Ihre kostenlose 30-Tage-Testversion oder kontaktieren Sie uns, um Ihre Anwendungsfälle zu besprechen .
„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."