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
