Release von nginx 1.28.0 und dem Fork FreeNginx 1.28.0

Nach einem Jahr der Entwicklung wurde der neue stabile Branch des leistungsstarken HTTP-Servers und Multi-Protokoll-Proxy-Servers nginx 1.28.0 veröffentlicht, der die Änderungen aus dem Haupt-Branch 1.27.x aufgenommen hat. In Zukunft werden alle Änderungen im stabilen Branch 1.28 darauf abzielen, schwerwiegende Fehler und SicherheitsanfĂ€lligkeiten zu beheben. Bald wird der Haupt-Branch nginx 1.29 gebildet, in dem die Entwicklung neuer Funktionen fortgesetzt wird. FĂŒr normale Benutzer, die keine KompatibilitĂ€t mit externen Modulen sicherstellen mĂŒssen, wird empfohlen, den Haupt-Branch zu verwenden, aus dem alle drei Monate Versionen des kommerziellen Produkts Nginx Plus erstellt werden.

Laut dem MÀrzbericht von Netcraft laufen etwa 245 Millionen Websites (vor einem Jahr 243 Millionen, vor zwei Jahren 289 Millionen) unter nginx. Nginx wird auf 17,89 % aller aktiven Websites verwendet (vor einem Jahr 18,15 %, vor zwei Jahren 18,94 %), was dem ersten Platz in dieser Kategorie entspricht (der Anteil von Apache betrÀgt 16,03 % (vor einem Jahr 20,09 %, vor zwei Jahren 20,52 %), Cloudflare - 17,81 % (14,12 %, 11,32 %), Google - 9,89 % (10,41 %, 9,89 %).

Bei der Betrachtung aller Websites behĂ€lt nginx die FĂŒhrung und hat einen Marktanteil von 20,48 % (vor einem Jahr 22,31 %, vor zwei Jahren 25,94 %), wĂ€hrend der Anteil von Apache 16,03 % betrĂ€gt (20,17 %, 20,58 %), Cloudflare - 12,87 % (11,24 %, 10,17 %), OpenResty (eine Plattform auf Basis von nginx und LuaJIT) - 9,36 % (7,93 %, 7,94 %).

Unter den Millionen der meistbesuchten Websites weltweit belegt nginx den zweiten Platz mit einem Anteil von 20,37 % (vor einem Jahr 20,63 %, vor zwei Jahren 21,37 %). Den ersten Platz hÀlt Cloudflare - 22,32 % (vor einem Jahr 22,59 %, vor zwei Jahren 21,62 %). Der Anteil von Apache httpd betrÀgt 17,95 % (20,09 %, 21,18 %).

Laut W3Techs wird nginx auf 33,8 % der Websites aus einer Million der meistbesuchten genutzt (im April letzten Jahres lag dieser Wert bei 34,3 %, im Jahr davor bei 34,5 %). Der Anteil von Apache ist im Laufe eines Jahres von 30,1 % auf 26,3 % gesunken, wÀhrend der Anteil von Microsoft IIS von 5 % auf 4 % gesunken ist. Der Anteil von Node.js stieg von 3,2 % auf 4,4 %, und der Anteil von LiteSpeed stieg von 12,9 % auf 14,6 %.

Die bemerkenswertesten Verbesserungen, die im Prozess der Bildung des Haupt-Branches 1.27.x hinzugefĂŒgt wurden:

  • FĂŒr Verbindungen, die das QUIC-Protokoll verwenden, wurde die UnterstĂŒtzung des NetzwerkĂŒberlastungsmanagement-Algorithmus CUBIC (RFC 9438) hinzugefĂŒgt. Dieser Algorithmus erhöht kontinuierlich die GrĂ¶ĂŸe des Überlastfensters, bis Paketverluste auftreten, wonach die FenstergrĂ¶ĂŸe auf den Wert vor dem Verlust zurĂŒckgesetzt wird. In durchgefĂŒhrten Tests konnte mit CUBIC die Übertragungszeit einer Datei mit 500 MB um 24 % bei einer Verzögerung von 40 ms und BDP von 750K (Bandwidth Delay Product) und um 73 % bei einer Verzögerung von 100 ms und BDP von 9M verkĂŒrzt werden.
  • Im Stream-Modul wurde die UnterstĂŒtzung fĂŒr die ÜberprĂŒfung des Widerrufs von Client-Zertifikaten unter Verwendung des OCSP-Protokolls (Online Certificate Status Protocol) hinzugefĂŒgt.
  • Im Modul stream wurde die UnterstĂŒtzung der Technik zur ÜberprĂŒfung von Zertifikatswiderrufen OCSP Stapling implementiert, bei der das von der Zertifizierungsstelle bestĂ€tigte OCSP-Antwort wĂ€hrend der Aushandlung der TLS-Verbindung vom Server, der die Website bedient, ohne direkte Anfrage an die Zertifizierungsstelle ĂŒbermittelt wird.
  • Beim Start und bei der Aktualisierung der Konfiguration wurde Caching implementiert SSL-Zertifikaten, von SchlĂŒsseln und CRL (Zertifikatssperrliste).
  • Es wurden Möglichkeiten zur Reduzierung des Ressourcenverbrauchs und der CPU-Last bei der Verwendung von TLS in Konfigurationen mit einer großen Anzahl von Server- und Standortblöcken hinzugefĂŒgt. Die vorgenommenen Änderungen erlauben es, anstelle von fĂŒr jeden Konfigurationsblock einen separaten SSL-Kontext (SSL_CTX in OpenSSL) zu erstellen, den bereits vorhandenen SSL-Kontext aus dem ĂŒbergeordneten Block zu verwenden.
  • In der Direktive „ssl_client_certificate“ wurde die UnterstĂŒtzung fĂŒr Zertifikate mit zusĂ€tzlichen Informationen gewĂ€hrleistet.
  • Zur ÜberprĂŒfung von Client-SSL-Zertifikaten ist die Direktive „ssl_client_certificate“ jetzt nicht mehr obligatorisch.
  • Im ngx_mail_proxy_module wurde die UnterstĂŒtzung fĂŒr den spezifischen IMAP LOGIN-Modus von SmarterMail mit einer nicht taggierten CAPABILITY-Antwort hinzugefĂŒgt.
  • Im ngx_http_proxy_module wurde die Direktive „proxy_pass_trailers“ hinzugefĂŒgt, die die Übertragung von Headerfeldern am Ende der Antwort vom proxierten Server an den Client erlaubt.
  • In die Direktive „server“, die im Block „upstream“ verwendet wird, wurde die UnterstĂŒtzung fĂŒr den Parameter „resolve“ hinzugefĂŒgt, der die Verfolgung von Änderungen fĂŒr den verwendeten DomĂ€nennamen und die automatische Aktualisierung der Konfiguration des „upstream“-Blocks ohne die Notwendigkeit eines nginx-Neustarts bei AdressĂ€nderungen beinhaltet. IP-Adressen die Konfiguration des „upstream“-Blocks automatisch aktualisiert, ohne dass ein Neustart von nginx erforderlich ist, wenn sich die Adresse Ă€ndert.
  • Die Verwendung von Variablen in den Direktiven „proxy_limit_rate“, „fastcgi_limit_rate“, „scgi_limit_rate“ und „uwsgi_limit_rate“ wurde eingefĂŒhrt.
  • In den Direktiven „proxy_bind“, „fastcgi_bind“, „grpc_bind“, „memcached_bind“, „scgi_bind“ und „uwsgi_bind“ sowie als Client-Adresse im Modul ngx_http_realip_module ist es nun erlaubt, IPv6-Adressen in eckigen Klammern ohne Portnummer anzugeben.
  • Die Direktive „keepalive_min_timeout“ wurde hinzugefĂŒgt, die den Timeout definiert, innerhalb dessen nginx die Keep-Alive-Verbindung mit dem Client nicht schließt.
  • StandardmĂ€ĂŸig sind die Protokolle TLSv1 und TLSv1.1 deaktiviert.
  • Die Probleme mit der langen Ladezeit von Konfigurationsdateien aufgrund der mehrfachen Analyse desselben Satzes von TLS-Zertifikaten, SchlĂŒsseln und Zertifizierungsstellenlisten wurden gelöst. Der Neustart der Konfiguration wurde durch die Wiederverwendung unverĂ€nderter TLS-Objekte wie Zertifikate, SchlĂŒssel und CRLs beschleunigt. Um die Vererbung von Objekten beim Aktualisieren der Konfiguration zu deaktivieren, wurde die Direktive „ssl_object_cache_inheritable“ hinzugefĂŒgt.
  • Ein Cache fĂŒr Zertifikate und SchlĂŒssel, die mit Variablen in den Direktiven geladen werden (zum Beispiel „ssl_certificate /etc/ssl/$ssl_server_name.crt“), wurde hinzugefĂŒgt. FĂŒr die Cache-Verwaltung wurden die Direktiven „ssl_certificate_cache“, „proxy_ssl_certificate_cache“, „grpc_ssl_certificate_cache“ und „uwsgi_ssl_certificate_cache“ hinzugefĂŒgt. Über die angegebenen Direktiven können die maximale Cache-GrĂ¶ĂŸe, die GĂŒltigkeitsdauer der EintrĂ€ge und die Zeit fĂŒr die Bereinigung ungenutzter EintrĂ€ge konfiguriert werden. Zum Beispiel: „ssl_certificate_cache max=1000 inactive=20s valid=1m;“.
  • Der Speicherverbrauch bei der Verarbeitung von lang laufenden Anfragen in Konfigurationen, in denen die Direktiven „gzip“, „gunzip“, „ssi“, „sub_filter“ oder „grpc_pass“ verwendet werden, wurde gesenkt.
  • Die maximale GrĂ¶ĂŸe der in gemeinsamem Speicher zwischengespeicherten SSL-Sitzungen wurde auf 8192 erhöht.
  • Die Integration mit der C-Bibliothek Musl wurde optimiert.
  • Optimierungsarbeiten zur Leistungssteigerung und Fehlerbehebung in der HTTP/3-Implementierung wurden durchgefĂŒhrt.

ZusĂ€tzlich kann die Veröffentlichung der Projektversion FreeNginx 1.28.0 erwĂ€hnt werden, die ein Fork von Nginx entwickelt. Die Entwicklung des Forks wird von Maxim Dunin geleitet, einem der SchlĂŒsselentwickler von Nginx. FreeNginx wird als gemeinnĂŒtziges Projekt positioniert, das die Entwicklung der Codebasis von Nginx ohne Unternehmensintervention gewĂ€hrleistet. Zu den spezifischen Änderungen in der Version FreeNginx 1.28 gehören:

  • Der Parameter „off“ in der Direktive „pid“, der die Erstellung einer PID-Datei deaktiviert.
  • Eine Begrenzung der IntensitĂ€t von Fehlermeldungen im Fehlerprotokoll zum Schutz vor einer ÜberfĂŒllung des Protokolls mit typischen Meldungen.
  • Die Implementierung des Parameters multipath in der Direktive listen zur UnterstĂŒtzung von Multipath TCP.
  • UnterstĂŒtzung des HTTP-Headers „Age“ zur Bestimmung der Lebensdauer von EintrĂ€gen im Cache.
  • HinzufĂŒgen der Authentifizierungsmethoden XOAUTH2 und OAUTHBEARER im Modul mail_proxy.

Quelle: opennet.ru

60GB SSD 8Gb DDR4