Nach einem Jahr Entwicklungszeit wurde der neue stabile Branch des leistungsstarken HTTP-Servers und Multi-Protokoll-Proxy-Servers nginx 1.20.0 veröffentlicht, der die in der Hauptversion 1.19.x gesammelten Änderungen beinhaltet. Zukünftig werden alle Updates im stabilen Branch 1.20 sich auf die Behebung schwerwiegender Fehler und Sicherheitsanfälligkeiten konzentrieren. Bald wird der Hauptbranch nginx 1.21 gebildet, in dem die Entwicklung neuer Funktionen fortgesetzt wird. Für reguläre Benutzer, die keine Kompatibilität mit Drittanbietermodulen sicherstellen müssen, wird empfohlen, die Hauptversion zu nutzen, auf deren Basis alle drei Monate kommerzielle Versionen von Nginx Plus veröffentlicht werden.
Laut dem Märzbericht von Netcraft wird nginx auf 20,15 % aller aktiven Webseiten eingesetzt (vor einem Jahr 19,56 %, vor zwei Jahren 20,73 %), was den zweiten Platz in dieser Kategorie bedeutet (der Anteil von Apache liegt bei 25,38 % (vor einem Jahr 27,64 %), Google bei 10,09 %, Cloudflare bei 8,51 %. Bei allen Webseiten bleibt nginx jedoch führend und hat einen Marktanteil von 35,34 % (vor einem Jahr 36,91 %, vor zwei Jahren 27,52 %), während der Anteil von Apache 25,98 % beträgt, OpenResty (eine Plattform basierend auf nginx und LuaJIT) 6,55 % und Microsoft IIS 5,96 % erreichen.
Unter den eine Million meistbesuchten Webseiten weltweit beträgt der Anteil von nginx 25,55 % (vor einem Jahr 25,54 %, vor zwei Jahren 26,22 %). Derzeit sind etwa 419 Millionen Webseiten unter nginx verwaltet (vor einem Jahr 459 Millionen). Laut W3Techs wird nginx auf 33,7 % der beliebtesten tausend Webseiten verwendet, während dieser Wert im April letzten Jahres bei 31,9 % lag und vor zwei Jahren bei 41,8 % (der Rückgang ist auf eine separate Erfassung des Cloudflare HTTP-Servers zurückzuführen). Der Anteil von Apache ist im Jahr von 39,5 % auf 34 % gesunken und der Anteil von Microsoft IIS von 8,3 % auf 7 %. Der Anteil von LiteSpeed ist von 6,3 % auf 8,4 % gestiegen und der Anteil von Node.js von 0,8 % auf 1,2 %. In Russland wird nginx auf 79,1 % der meistbesuchten Webseiten eingesetzt (vor einem Jahr 78,9 %).
Die auffälligsten Verbesserungen, die im Rahmen der Entwicklung der Hauptversion 1.19.x hinzugefügt wurden:
- Die Möglichkeit zur Überprüfung von Client-Zertifikaten unter Einbeziehung externer Dienste auf der Basis des OCSP-Protokolls (Online Certificate Status Protocol) wurde eingeführt. Für die Aktivierung der Überprüfung steht die Direktive ssl_ocsp zur Verfügung, um die Cache-Größe einzustellen — ssl_ocsp_cache, sowie zum Überschreiben der im Zertifikat angegebenen OCSP-Responder-URL — ssl_ocsp_responder.
- Das Modul ngx_stream_set_module wurde hinzugefügt, das es ermöglicht, den Wert einer Variablen zuzuweisen. server { listen 12345; set $true 1; }
- Die Direktive proxy_cookie_flags wurde hinzugefügt, um Flags für Cookies in proxied Verbindungen anzugeben. Beispielsweise kann zur Hinzufügung des Flags „httponly“ für das Cookie „one“ und zur Übertragung der Flags „nosecure“ und „samesite=strict“ für alle anderen Cookies die folgende Konstruktion verwendet werden: proxy_cookie_flags one httponly; proxy_cookie_flags ~ nosecure samesite=strict;
Eine ähnliche Direktive userid_flags zur Hinzufügung von Flags zu Cookies wurde ebenfalls für das Modul ngx_http_userid implementiert.
- Die Direktiven „ssl_conf_command“, „proxy_ssl_conf_command“, „grpc_ssl_conf_command“ und „uwsgi_ssl_conf_command“ wurden hinzugefügt, mit deren Hilfe beliebige Parameter für die Konfiguration von OpenSSL festgelegt werden können. Beispielsweise können zur Priorisierung der ChaCha-Chiffren und zur erweiterten Konfiguration der TLSv1.3-Chiffren die folgenden Optionen angegeben werden: ssl_conf_command Options PrioritizeChaCha; ssl_conf_command Ciphersuites TLS_CHACHA20_POLY1305_SHA256;
- Die Direktive „ssl_reject_handshake“ wurde hinzugefügt, die vorschreibt, alle Verhandlungsversuche abzulehnen. SSL-Verbindungen (zum Beispiel kann sie verwendet werden, um alle Anfragen mit unbekannten Hostnamen im SNI-Feld abzulehnen). server { listen 443 ssl; ssl_reject_handshake on; } server { listen 443 ssl; server_name example.com; ssl_certificate example.com.crt; ssl_certificate_key example.com.key; }
- Der Mail-Proxy enthält jetzt die Direktive proxy_smtp_auth, die es ermöglicht, den Benutzer über den AUTH-Befehl und den PLAIN-SASL-Mechanismus im Backend zu authentifizieren.
- Die Direktive „keepalive_time“ wurde hinzugefügt, die die gesamte Lebensdauer jeder Keep-Alive-Verbindung begrenzt, nach deren Ablauf die Verbindung geschlossen wird (nicht zu verwechseln mit keepalive_timeout, das die Inaktivitätszeit bestimmt, nach der die Keep-Alive-Verbindung geschlossen wird).
- Eine Variable $connection_time wurde hinzugefügt, über die Informationen zur Dauer der Verbindung in Sekunden mit Millisekundenpräzision abgerufen werden können.
- In die Direktiven „proxy_cache_path“, „fastcgi_cache_path“, „scgi_cache_path“ und „uwsgi_cache_path“ wurde der Parameter „min_free“ eingefügt, der die Größe des Caches basierend auf der Definition der minimalen Menge an freiem Speicherplatz steuert.
- Die Direktiven „lingering_close“, „lingering_time“ und „lingering_timeout“ wurden für die Nutzung mit HTTP/2 angepasst.
- Der Verbindungsbehandlungs-Code in HTTP/2 wurde näher an die Implementierung von HTTP/1.x angeglichen. Die Unterstützung für separate Einstellungen wie „http2_recv_timeout“, „http2_idle_timeout“ und „http2_max_requests“ wurde zugunsten der allgemeinen Direktiven „keepalive_timeout“ und „keepalive_requests“ eingestellt. Die Einstellungen „http2_max_field_size“ und „http2_max_header_size“ wurden entfernt; stattdessen sollten „large_client_header_buffers“ verwendet werden.
- Eine neue Option für die Kommandozeile „-e“ wurde hinzugefügt, die es ermöglicht, eine alternative Datei für die Aufzeichnung von Fehlerprotokollen anzugeben, die anstelle der in den Einstellungen festgelegten Protokolldatei verwendet wird. Anstelle eines Dateinamens kann auch der spezielle Wert stderr angegeben werden.
Quelle: opennet.ru
