Nach 13 Monaten Entwicklung wurde der neue stabile Branch des leistungsstarken HTTP-Servers und Multi-Protokoll-Proxy-Servers nginx 1.22.0 vorgestellt, der die in der Hauptversion 1.21.x angesammelten Änderungen aufgenommen hat. In Zukunft werden alle Änderungen im stabilen Branch 1.22 mit der Beseitigung schwerwiegender Fehler und Schwachstellen verbunden sein. Bald wird der Hauptbranch nginx 1.23 gebildet, in dem die Entwicklung neuer Möglichkeiten 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 Basis alle drei Monate die Versionen des kommerziellen Produkts Nginx Plus erstellt werden.
Laut dem April-Bericht von Netcraft wird nginx auf 20,08 % aller aktiven Websites verwendet (vor einem Jahr 20,15 %, vor zwei Jahren 19,56 %), was dem zweiten Platz in dieser Kategorie entspricht (der Anteil von Apache liegt bei 22,58 % (vor einem Jahr 25,38 %), Cloudflare – 10,42 % (8,51 %), Google – 8,89 % (10,09 %). Dabei behält nginx beim Betrachten aller Websites die Führungsposition und macht 31,13 % des Marktes aus (vor einem Jahr 35,34 %, vor zwei Jahren 36,91 %), während der Anteil von Apache 23,08 % (25,98 %) beträgt, OpenResty (Plattform auf Basis von nginx und LuaJIT) – 8,01 % (6,55 %), Cloudflare – 5,49 %, Microsoft IIS – 4 % (5,96 %).
Unter den millionen meistbesuchten Websites weltweit beträgt der Anteil von nginx 21,79 % (vor einem Jahr 23,06 %, vor zwei Jahren 25,54 %). Derzeit laufen etwa 361 Millionen Websites unter nginx (vor einem Jahr 419 Millionen). Laut W3Techs wird nginx auf 33,5 % der millionen meistbesuchten Websites eingesetzt; im Mai letzten Jahres lag dieser Wert bei 33,8 %, vorletztes Jahr bei 31,9 %. Der Anteil von Apache ist im Laufe des Jahres von 33,8 % auf 31,5 % gesunken, während der Anteil von Microsoft IIS von 7 % auf 6 % gesunken ist. Der Anteil von LiteSpeed ist von 8,5 % auf 12,1 % gestiegen, und Node.js von 1,2 % auf 1,9 %. In Russland wird nginx auf 79,8 % der meistbesuchten Websites verwendet (vor einem Jahr – 79,1 %).
Die auffälligsten Verbesserungen, die im Verlauf der Bildung des Hauptbranches 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 von Variablen hinzugefügt.
- Im E-Mail-Proxy-Modul wurde die Unterstützung des „Pipelining“-Modus für die Übertragung mehrerer POP3- oder IMAP-Anfragen in einer 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“ wurde implementiert. zu einem Server Authentifizierung des E-Mail-Proxys.
- Im Stream-Modul wurde die Unterstützung für die TLS-Erweiterung ALPN hinzugefügt. Die Direktive ssl_alpn wird vorgeschlagen, um die Liste der unterstützten ALPN-Protokolle (h2, http/1.1) zu bestimmen, und die Variable $ssl_alpn_protocol gibt Informationen über das mit dem Client vereinbarte ALPN-Protokoll zurück.
- Im Stream-Modul wurde der Parameter "fastopen" hinzugefügt, der den „TCP Fast Open“-Modus für verbindende Sockets aktiviert.
- Die Escape-Zeichen für «»», «», «\», «^», «`», «{«, «|» und «}» wurden beim Proxys mit URI-Änderung implementiert.
- Im Stream-Modul wurde die Direktive proxy_half_close hinzugefügt, mit der das Verhalten beim Schließen einer proxierten TCP-Verbindung auf einer der beiden Seiten (TCP half-close) konfiguriert werden kann.
- Im Modul ngx_http_mp4_module wurde die neue Direktive mp4_start_key_frame hinzugefügt, um einen Videostream ab dem Schlüsselbild auszustrahlen.
- Die Variable $ssl_curve wurde hinzugefügt, die den Typ der für die Schlüsselvereinbarung in der TLS-Sitzung gewählten elliptischen Kurve zurückgibt.
- Im Direktive „sendfile_max_chunk“ wurde der Standardwert auf 2 Megabyte geändert.
- Die Kompatibilität mit der OpenSSL-Bibliothek 3.0 wurde sichergestellt. Die Unterstützung für den Aufruf von SSL_sendfile() bei Verwendung von OpenSSL 3.0 wurde hinzugefügt.
- Die Standardbuilds werden jetzt mit der PCRE2-Bibliothek bereitgestellt, die Funktionen zur Verarbeitung regulärer Ausdrücke bietet.
- Beim Laden von Zertifikaten Server wurde die Verwendung von Sicherheitsstufen eingerichtet, die ab OpenSSL 1.1.0 unterstützt werden und durch den Parameter „@SECLEVEL=N“ in der Direktive ssl_ciphers festgelegt werden.
- Die Unterstützung für die Export-Verschlüsselungssuite wurde eingestellt.
- Im API der Request-Body-Filterung wurde das Puffern der verarbeiteten Daten erlaubt.
- Auf der FreeBSD-Plattform wurde die Unterstützung des Systemaufrufs sendfile verbessert, der für die direkte Datenübertragung zwischen einem Dateideskriptor und einem Socket vorgesehen ist. Der sendfile-Modus (SF_NODISKIO) wird ständig aktiviert und die Unterstützung für den sendfile-Modus (SF_NOCACHE) wurde hinzugefügt.
- Die Unterstützung für die Einrichtung von HTTP/2-Verbindungen mit der NPN-Erweiterung (Next Protocol Negotiation) anstelle von ALPN wurde eingestellt.
- Es wurde eine Blockierung von HTTP/1.0-Anfragen sichergestellt, die den HTTP-Header „Transfer-Encoding“ enthalten (dies 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, wodurch unbefugte Zugriffe auf die Inhalte von Anfragen anderer Benutzer in denselben Stream zwischen Frontend und Backend möglich werden. Nginx gibt nun immer einen Fehler zurück, wenn die CONNECT-Methode verwendet wird; bei gleichzeitiger Angabe der Header "Content-Length" und "Transfer-Encoding"; sowie bei Vorhandensein von Leerzeichen oder Steuerzeichen in der Anfragezeichenfolge, im Namen des HTTP-Headers oder im Wert des "Host"-Headers.
Quelle: opennet.ru
