Nach einem Jahr Entwicklung wurde der neue stabile Branch des hochleistungsfähigen HTTP-Servers und des Mult Protocol Proxy Servers nginx 1.28.0 veröffentlicht, der die Änderungen aus der Hauptbranch 1.27.x integriert. Zukünftig werden alle Änderungen in der stabilen Branch 1.28 auf die Behebung von schwerwiegenden Fehlern und Sicherheitslücken abzielen. Bald wird die Hauptbranch nginx 1.29 gebildet, in der die Weiterentwicklung neuer Funktionen fortgesetzt wird. Für gewöhnliche Benutzer, die keine Kompatibilität mit Drittanbieter-Modulen sicherstellen müssen, wird empfohlen, die Hauptbranch zu verwenden, auf deren Basis alle drei Monate Versionen des kommerziellen Produkts Nginx Plus bereitgestellt werden.
Laut dem Märzbericht von Netcraft werden etwa 245 Millionen Websites (vor einem Jahr 243 Millionen, vor zwei Jahren 289 Millionen) von nginx betrieben. nginx wird auf 17,89% aller aktiven Websites eingesetzt (vor einem Jahr 18,15%, vor zwei Jahren 18,94%), was dem ersten Platz in dieser Kategorie entspricht (Apache hat einen Anteil von 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 Analyse aller Websites hält Nginx die Spitzenposition mit einem Marktanteil von 20,48 % (vor einem Jahr 22,31 %, vor zwei Jahren 25,94 %), während der Anteil von Apache bei 16,03 % liegt (20,17 %, 20,58 %), Cloudflare bei 12,87 % (11,24 %, 10,17 %) und OpenResty (eine auf Nginx und LuaJIT basierende Plattform) bei 9,36 % (7,93 %, 7,94 %).
Unter den weltweit eine Million meistbesuchten Websites 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 mit 22,32 % (vor einem Jahr 22,59 %, vor zwei Jahren 21,62 %). Der Anteil von Apache httpd liegt bei 17,95 % (20,09 %, 21,18 %).
Laut W3Techs wird Nginx auf 33,8 % der eine Million meistbesuchten Websites eingesetzt (im April des letzten Jahres lag dieser Wert bei 34,3 %, vor zwei Jahren bei 34,5 %). Der Anteil von Apache ist im Laufe des letzten 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 ist von 3,2 % auf 4,4 % gestiegen, und der Anteil von LiteSpeed von 12,9 % auf 14,6 %.
Die auffälligsten Verbesserungen, die im Verlauf der Entwicklung des Hauptzweigs 1.27.x hinzugefügt wurden:
- Für Verbindungen, die das QUIC-Protokoll nutzen, wurde die Unterstützung des CUBIC-Netzwerküberlastungssteuerungsalgorithmus (RFC 9438) hinzugefügt. Dieser Algorithmus erhöht die Größe des Überlastfensters schrittweise, bis Paketverluste auftreten, wonach die Fenstergröße auf den Wert vor dem Verlust zurückgesetzt wird. In durchgeführten Tests konnte durch die Verwendung von CUBIC die Übertragungszeit einer Datei mit 500 MB um 24 % bei einer Latenz von 40 ms und BDP 750 K (Bandwidth Delay Product) und um 73 % bei einer Latenz von 100 ms und BDP 9 M verkürzt werden.
- Im Stream-Modul wurde die Unterstützung für die Überprüfung der Kundenzertifikatsrückrufe mit dem Protokoll OCSP (Online Certificate Status Protocol) hinzugefügt.
- Im Stream-Modul wurde die Unterstützung für die OCSP-Stapling-Zertifikatsüberprüfung implementiert. Bei der Aushandlung einer TLS-Verbindung wird die vom Zertifizierungsstellen geprüfte OCSP-Antwort vom Server, der die Website bedient, bereitgestellt, ohne dass eine direkte Anfrage an die Zertifizierungsstelle notwendig ist.
- Bei der Konfigurationserstellung und -aktualisierung wurde die Caching-Funktion implementiert SSL-Zertifikate, von Schlüsseln und der CRL (Zertifikatsperrliste).
- Es wurden Funktionen hinzugefügt, um den Ressourcenverbrauch zu reduzieren und die CPU-Belastung bei der Verwendung von TLS in Konfigurationen mit einer großen Anzahl von server- und location-Blöcken zu verringern. Die hinzugefügten Änderungen ermöglichen es, anstelle der Erstellung eines separaten SSL-Kontexts (SSL_CTX in OpenSSL) für jeden Konfigurationsblock, den bereits vorhandenen SSL-Kontext aus dem übergeordneten Block zu verwenden.
- Die Direktive „ssl_client_certificate“ unterstützt jetzt Zertifikate mit zusätzlichen Informationen.
- Die Direktive „ssl_client_certificate“ ist nun nicht mehr obligatorisch zur Überprüfung der Client-SSL-Zertifikate.
- Im Modul ngx_mail_proxy_module wurde die Unterstützung des spezifischen IMAP LOGIN-Modus für SmarterMail mit nichtgetaggter CAPABILITY-Antwort hinzugefügt.
- Im Modul 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 das Tracking von Änderungen IP-Adressen des verwendeten Domänennamens und das automatische Aktualisieren der Konfiguration des Blocks „upstream“ ohne die Notwendigkeit eines Neustarts von nginx bei Änderungen der Adresse ermöglicht.
- Die Möglichkeit, Variablen in den Direktiven „proxy_limit_rate“, „fastcgi_limit_rate“, „scgi_limit_rate“ und „uwsgi_limit_rate“ zu verwenden, wurde hinzugefügt.
- In den Direktiven „proxy_bind“, „fastcgi_bind“, „grpc_bind“, „memcached_bind“, „scgi_bind“ und „uwsgi_bind“ sowie als Clientadresse im Modul ngx_http_realip_module ist die Angabe von IPv6-Adressen in eckigen Klammern ohne Portnummer erlaubt.
- Die Anweisung „keepalive_min_timeout“ wurde hinzugefügt, die das Timeout festlegt, während dessen Nginx die Keep-Alive-Verbindung zum Client nicht schließt.
- Die Protokolle TLSv1 und TLSv1.1 sind standardmäßig deaktiviert.
- Die Probleme mit der langsamen Ladezeit von Konfigurationsdateien wurden behoben, die durch das wiederholte Parsen desselben Satzes von TLS-Zertifikaten, Schlüsseln und Zertifizierungsstellen verursacht wurden. Die Neuladung 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.
- Es wurde ein Cache für Zertifikate und Schlüssel hinzugefügt, die mit Variablen in Anweisungen (z. B. „ssl_certificate /etc/ssl/$ssl_server_name.crt“) geladen wurden. Für die Verwaltung des Caches wurden die Anweisungen „ssl_certificate_cache“, „proxy_ssl_certificate_cache“, „grpc_ssl_certificate_cache“ und „uwsgi_ssl_certificate_cache“ hinzugefügt. Über die angegebenen Anweisungen kann die maximale Cachegröße, die Gültigkeitsdauer der Einträge und die Zeit für das Löschen nicht mehr benötigter Einträge konfiguriert werden. Beispiel: „ssl_certificate_cache max=1000 inactive=20s valid=1m;“.
- Der Speicherverbrauch bei der Verarbeitung langlebiger Anfragen in Konfigurationen, die die Direktiven „gzip“, „gunzip“, „ssi“, „sub_filter“ oder „grpc_pass“ verwenden, wurde reduziert.
- Die maximale Größe der in gemeinsam genutztem Speicher zwischenspeicherbaren SSL-Sitzungen wurde auf 8192 erhöht.
- Der Build mit der C-Bibliothek Musl wurde optimiert.
- Optimierungsarbeiten zur Leistungsverbesserung und Fehlerbehebung in der Implementierung von HTTP/3 wurden durchgeführt.
Zusätzlich kann die Veröffentlichung der Projektversion FreeNginx 1.28.0 erwähnt werden, die einen Fork von Nginx entwickelt. Die Entwicklung des Forks wird von Maxim Dunin geleitet, einem der Hauptentwickler von Nginx. FreeNginx positioniert sich als gemeinnütziges Projekt, das die Entwicklung der Nginx-Codebasis 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.
- Begrenzung der Intensität der Protokollierung von Fehlermeldungen zum Schutz vor einer Protokollüberfüllung mit typischen Nachrichten.
- 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 Cache-Einträgen.
- Hinzufügen der Authentifizierungsmethoden XOAUTH2 und OAUTHBEARER im Modul mail_proxy.
Quelle: opennet.ru
