Nach 13 Monaten Entwicklungszeit wurde der neue stabile Branch des leistungsstarken HTTP-Servers und des Multi-Protokoll-Proxy-Servers nginx 1.22.0 vorgestellt, der die Änderungen aus dem Hauptbranch 1.21.x umfasst. Zukünftig werden alle Änderungen im stabilen Branch 1.22 auf die Behebung schwerwiegender Fehler und Sicherheitsanfälligkeiten abzielen. Bald wird der Hauptbranch nginx 1.23 gebildet, in dem die Entwicklung neuer Funktionen fortgesetzt wird. Für normale Benutzer, die keine Kompatibilität mit Drittanbieter-Modulen gewährleisten müssen, wird empfohlen, den Hauptbranch zu verwenden, auf dessen Grundlage alle drei Monate neue Versionen des kommerziellen Produkts Nginx Plus veröffentlicht werden.
Laut dem Aprilbericht von Netcraft wird nginx auf 20,08 % aller aktiven Websites eingesetzt (vor einem Jahr 20,15 %, vor zwei Jahren 19,56 %), was ihm den zweiten Platz in dieser Kategorie einbringt (der Anteil von Apache beträgt 22,58 % (vor einem Jahr 25,38 %), Cloudflare – 10,42 % (8,51 %), Google – 8,89 % (10,09 %). Betrachtet man alle Websites, behauptet nginx die Führungsposition mit einem Marktanteil von 31,13 % (vor einem Jahr 35,34 %, vor zwei Jahren 36,91 %), während der Anteil von Apache bei 23,08 % (25,98 %) liegt, OpenResty (eine Plattform auf Basis von nginx und LuaJIT) bei 8,01 % (6,55 %), Cloudflare bei 5,49 % und Microsoft IIS bei 4 % (5,96 %).
Unter den million meistbesuchten Websites weltweit hat nginx einen Anteil von 21,79 % (vor einem Jahr 23,06 %, vor zwei Jahren 25,54 %). Derzeit wird nginx auf etwa 361 Millionen Websites betrieben (vor einem Jahr 419 Millionen). Laut W3Techs wird nginx auf 33,5 % der million meistbesuchten Websites eingesetzt; im Mai des letzten Jahres lag dieser Wert bei 33,8 %, im Jahr davor bei 31,9 %. Der Anteil von Apache ist im Jahresvergleich von 33,8 % auf 31,5 % gesunken, der Anteil von Microsoft IIS von 7 % auf 6 %. Der Anteil von LiteSpeed ist von 8,5 % auf 12,1 % gestiegen, und Node.js ist von 1,2 % auf 1,9 % gewachsen. In Russland wird nginx auf 79,8 % der meistbesuchten Websites verwendet (vor einem Jahr 79,1 %).
Die auffälligsten Verbesserungen, die im Laufe der Entwicklung der Hauptversion 1.21.x hinzugefügt wurden:
- In den Direktiven „proxy_ssl_certificate“, „proxy_ssl_certificate_key“, „grpc_ssl_certificate“, „grpc_ssl_certificate_key“, „uwsgi_ssl_certificate“ und „uwsgi_ssl_certificate_key“ wurde die Unterstützung für Variablen hinzugefügt.
- Im Mail-Proxy-Modul wurde die Unterstützung des „Pipelining“-Modus für die Übertragung mehrerer POP3- oder IMAP-Anfragen über eine Verbindung hinzugefügt, sowie eine neue Direktive „max_errors“, die die maximale Anzahl an Protokollfehlern definiert, nach denen die Verbindung geschlossen wird.
- Die Übertragung der Header „Auth-SSL-Protocol“ und „Auth-SSL-Cipher“ Server zur Authentifizierung des Mail-Proxys wurde realisiert.
- Im Stream-Modul wurde die Unterstützung für die TLS-Erweiterung ALPN hinzugefügt. Zur Festlegung der unterstützten ALPN-Protokolle (h2, http/1.1) wurde die Direktive ssl_alpn vorgeschlagen und zur Erfassung des mit dem Client vereinbarten ALPN-Protokolls die Variable $ssl_alpn_protocol.
- Im Stream-Modul wurde der Parameter „fastopen“ hinzugefügt, der den Modus „TCP Fast Open“ für wartende Sockets aktiviert.
- Die Escape-Sequenzen für die Zeichen „"“, „‘“, „\“, „^“, „`“, „{“, „|“ und „}“ wurden beim Proxys mit URI-Änderungen optimiert.
- Im Modul stream wurde die Direktive proxy_half_close hinzugefügt, mit der das Verhalten beim Schließen einer proxierten TCP-Verbindung auf einer der Seiten („TCP half-close“) konfiguriert werden kann.
- Im Modul ngx_http_mp4_module wurde die neue Direktive mp4_start_key_frame hinzugefügt, um den Video-Stream ab dem Schlüsselbild zu übertragen.
- Die Variable $ssl_curve wurde hinzugefügt, die den Typ der elliptischen Kurve zurückgibt, die für die Schlüsselvereinbarung in der TLS-Session ausgewählt wurde.
- Im Attribut „sendfile_max_chunk“ wurde der Standardwert auf 2 Megabyte geändert.
- Die Kompatibilität mit der OpenSSL 3.0-Bibliothek wurde sichergestellt. Unterstützung für den Aufruf von SSL_sendfile() bei Verwendung von OpenSSL 3.0 wurde hinzugefügt.
- Standardmäßig wird die Kompilierung mit der PCRE2-Bibliothek aktiviert, die Funktionen zur Verarbeitung regulärer Ausdrücke bereitstellt.
- Beim Laden von Zertifikaten Server wurde die Verwendung von Sicherheitsstufen eingerichtet, die ab OpenSSL 1.1.0 unterstützt werden und über den Parameter „@SECLEVEL=N“ in der Direktive ssl_ciphers festgelegt werden.
- Die Unterstützung des Export Cipher Suite wurde eingestellt.
- Im API für die Filterung des Anforderungskörpers wurde die Pufferung der verarbeiteten Daten erlaubt.
- In der FreeBSD-Plattform wurde die Unterstützung des Systemaufrufs sendfile verbessert, der für die direkte Datenübertragung zwischen einem Dateideskriptor und einem Socket gedacht ist. Der Modus sendfile(SF_NODISKIO) ist nun ständig aktiviert und es wurde Unterstützung für den Modus sendfile(SF_NOCACHE) hinzugefügt.
- Die Unterstützung für die Einrichtung von HTTP/2-Verbindungen mit dem NPN (Next Protocol Negotiation)-Erweiterung anstelle von ALPN wurde eingestellt.
- Es wurde eine Sperre für HTTP/1.0-Anfragen implementiert, die den HTTP-Header „Transfer-Encoding“ enthalten (dieser wurde in der Version des HTTP/1.1-Protokolls eingeführt).
- Der Schutz vor „HTTP Request Smuggling“-Angriffen auf Frontend-Backend-Systeme wurde verstärkt, um zu verhindern, dass Angreifer in die Inhalte von Anfragen anderer Benutzer eingreifen, die im selben Strom zwischen Frontend und Backend verarbeitet werden. Nginx gibt jetzt immer einen Fehler zurück, wenn die CONNECT-Methode verwendet wird; wenn sowohl die Header „Content-Length“ als auch „Transfer-Encoding“ gleichzeitig angegeben werden; und bei Vorhandensein von Leerzeichen oder Steuerzeichen in der Anfragezeile, dem Namen des HTTP-Headers oder dem Wert des Headers „Host“.
Quelle: opennet.ru
