Nach einem Jahr Entwicklung wurde der neue stabile Zweig des leistungsstarken HTTP-Servers und Multi-Protokoll-Proxyservers nginx 1.26.0 veröffentlicht, der die in der Hauptzweig 1.25.x gesammelten Ănderungen integriert. ZukĂŒnftig werden alle Ănderungen im stabilen Zweig 1.26 mit der Behebung schwerwiegender Fehler und SicherheitsanfĂ€lligkeiten verbunden sein. Bald wird der Hauptzweig nginx 1.27 gebildet, in dem die Entwicklung neuer Funktionen fortgesetzt wird. FĂŒr normale Benutzer, die keine KompatibilitĂ€t mit Drittmodulen sicherstellen mĂŒssen, wird empfohlen, den Hauptzweig zu verwenden, auf dessen Basis alle drei Monate die Versionen des kommerziellen Produkts Nginx Plus gebildet werden.
Laut dem MĂ€rzbericht von Netcraft arbeiten rund 243 Millionen Websites (vor einem Jahr 289 Millionen) unter nginx. Nginx wird auf 18,15 % aller aktiven Websites verwendet (vor einem Jahr 18,94 %, vor zwei Jahren 20,08 %), was dem zweiten Platz in dieser Kategorie entspricht (der Anteil von Apache betrĂ€gt 20,09 % (vor einem Jahr 20,52 %, vor zwei Jahren 22,58 %), Cloudflare - 14,12 % (11,32 %, 10,42 %), Google - 10,41 % (9,89 %, 8,89 %). Dabei behĂ€lt nginx bei der Betrachtung aller Websites die FĂŒhrung und hat einen Marktanteil von 22,31 % (vor einem Jahr 25,94 %, vor zwei Jahren - 31,13 %), wĂ€hrend der Anteil von Apache 20,17 % betrĂ€gt (20,58, 23,08 %), Cloudflare - 11,24 % (10,17, 5,49 %), OpenResty (Plattform basierend auf nginx und LuaJIT) - 7,93 % (7,94 %, 8,01 %).
Unter den eine Million am hÀufigsten besuchten Websites weltweit betrÀgt der Anteil von nginx 20,63% (vor einem Jahr 21,37%, vor zwei Jahren 21,79%), Cloudflare 22,59% (vor einem Jahr 21,62%), und Apache httpd 20,09% (21,18%). Laut W3Techs wird nginx auf 34,3% der eine Million am hÀufigsten besuchten Websites verwendet; im April letzten Jahres lag dieser Wert bei 34,5%, davor bei 33,1%. Der Anteil von Apache ist im Laufe des Jahres von 32,2% auf 30,1% gesunken, der Anteil von Microsoft IIS von 5,6% auf 4,8%. Der Anteil von Node.js ist von 2,4% auf 3,2% gestiegen, wÀhrend der Anteil von LiteSpeed von 11,8% auf 12,9% gestiegen ist.
Die bemerkenswertesten Verbesserungen, die im Prozess der Bildung des Hauptzweigs 1.25.x hinzugefĂŒgt wurden:
- Das Modul ngx_http_v3 mit experimenteller UnterstĂŒtzung fĂŒr das Protokoll HTTP/3 wurde hinzugefĂŒgt. FĂŒr den Bau des Moduls gibt es die Option ââwith-http_v3_moduleâ. HTTP/3 definiert die Verwendung des QUIC-Protokolls (Quick UDP Internet Connections) als Transport fĂŒr HTTP/2. QUIC ist eine Erweiterung des UDP-Protokolls, das die Multiplexierung mehrerer Verbindungen unterstĂŒtzt und VerschlĂŒsselungsmethoden bietet, die vergleichbar mit TLS/SSL sind. Das Protokoll wurde 2013 von Google als Alternative zu der Kombination TCP+TLS fĂŒr das Web erstellt, um Probleme mit der langen Installations- und Aushandlungszeit von Verbindungen in TCP zu lösen und Verzögerungen bei Paketverlusten wĂ€hrend der DatenĂŒbertragung zu beseitigen.
- Eine separate Direktive âhttp2â wurde hinzugefĂŒgt, um das Protokoll HTTP/2 selektiv im Bezug auf Server zu aktivieren (kann in separaten âserverâ-Blöcken verwendet werden). Der Parameter âhttp2â in der Direktive âlistenâ ist veraltet.
- Der Schutz vor abnormaler AktivitĂ€t von HTTP/2-Clients wurde verstĂ€rkt, insbesondere vor DoS-Angriffen der Klasse âRapid Resetâ, bei denen eine groĂe Anzahl von sofort zurĂŒckgesetzten Streams innerhalb einer einzigen HTTP/2-Verbindung erzeugt wird. In der Standardkonfiguration stoĂen solche Angriffe an die Grenze der maximalen Anfragen pro Verbindung âkeepalive_requestsâ (nach jeweils 1000 Anfragen wird die Verbindung zurĂŒckgesetzt) und an die Begrenzungen âlimit_reqâ. Um schneller auf Spam-Anfragen durch eine groĂe Anzahl von Streams zu reagieren, wurde eine zusĂ€tzliche BeschrĂ€nkung hinzugefĂŒgt, die standardmĂ€Ăig verhindert, dass mehr als 256 (2 * max_concurrent_streams) neue Streams pro Ereignisverarbeitungsschleife erstellt werden. Diese neue BeschrĂ€nkung ermöglicht es, Anfragen zu blockieren, bevor die Gesamtlage der maximalen Anzahl an gleichzeitigen Streams erreicht wird, z. B. wenn die Streams asynchron verarbeitet oder zurĂŒckgesetzt werden.
- Der Stream-Modul unterstĂŒtzt virtuellen Servern, deren Konfiguration im Block âserver { ⊠}â mit Hilfe der Direktive server_name festgelegt wird. server { server_name ~^(www\.)?(.+)$; proxy_pass www.$2:12345; }
- Ein neues Modul ngx_stream_pass_module wurde hinzugefĂŒgt, das dafĂŒr vorgesehen ist, empfangene Verbindungen direkt an jeden hörenden Socket weiterzuleiten, der mit Modulen wie http, stream und mail verbunden ist. stream { server { listen 12345 ssl; ssl_certificate domain.crt; ssl_certificate_key domain.key; pass 127.0.0.1:8000; } }
- Im Listen-Direktiv des Stream-Moduls wurden UnterstĂŒtzung fĂŒr die Parameter âdeferredâ (einschlieĂlich verzögertem Accept), âaccept_filterâ (Filter fĂŒr eingehende Verbindungen, der vor dem Aufruf der Funktion Accept angewendet wird) und âsetfibâ (Festlegung der Routing-Tabelle) realisiert.
- FĂŒr einige Architekturen wurde die UnterstĂŒtzung zur Bestimmung der BlockgröĂe (Cache-Line), die fĂŒr die DatenĂŒbertragung zwischen dem CPU-Cache und dem Speicher verwendet wird, implementiert.
- Die Verwaltung der Buffer, die bei der automatischen Bestimmung von HTTP/2-Verbindungen verwendet werden, wurde verbessert.
- Die Leistung beim Starten von Konfigurationen mit einer groĂen Anzahl von âlocationâ-Direktiven wurde erhöht.
- Die UnterstĂŒtzung fĂŒr die Server-Push-Technologie in HTTP/2 wurde entfernt.
- Die UnterstĂŒtzung fĂŒr die bereits als veraltet erklĂ€rte âsslâ-Direktive wurde eingestellt.
Die stabile Version des FreeNginx-Projekts 1.26.0, eines Forks von Nginx, wurde vor zwei Wochen veröffentlicht. Die Entwicklung des Forks wird von Maxim Dunin, einem der Hauptentwickler von Nginx, geleitet. FreeNginx positioniert sich als gemeinnĂŒtziges Projekt, das die Entwicklung des Nginx-Codebasis ohne Unternehmensintervention ermöglicht.
Quelle: opennet.ru
