Nach einem Jahr der Entwicklung wurde der neue stabile Branch des hochleistungsfähigen HTTP-Servers und Multi-Protokoll-Proxy-Servers nginx 1.26.0 veröffentlicht. Dieser enthält die Änderungen, die in der Hauptlinie 1.25.x gesammelt wurden. Zukünftige Änderungen im stabilen Branch 1.26 werden sich auf die Behebung ernsthafter Fehler und Sicherheitsanfälligkeiten konzentrieren. Bald wird der Hauptbranch nginx 1.27 erstellt, in dem die Entwicklung neuer Funktionen fortgesetzt wird. Für regelmäßige Benutzer, die keine Kompatibilität mit Drittanbieter-Modulen gewährleisten müssen, wird empfohlen, den Hauptbranch zu verwenden, basierend auf dem vierteljährlich eine kommerzielle Version von Nginx Plus veröffentlicht wird.
Laut dem Bericht von Netcraft im März werden etwa 243 Millionen Websites (vor einem Jahr waren es 289 Millionen) von nginx betrieben. Nginx wird auf 18,15 % aller aktiven Websites verwendet (vor einem Jahr 18,94 %, vor zwei Jahren 20,08 %), was den zweiten Platz in dieser Kategorie bedeutet (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 %). Betrachtet man alle Websites, bleibt nginx führend mit 22,31 % Markanteil (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 (eine Plattform auf Basis von nginx und LuaJIT) 7,93 % (7,94 %, 8,01 %).
Среди миллиона самых посещаемых сайтов в мире доля nginx составляет 20.63% (год назад 21.37%, два года назад 21.79%), Cloudflare — 22.59% (год назад 21.62%), Apache httpd — 20.09% (21.18%). По данным W3Techs nginx используется на 34.3% сайтов из миллиона самых посещаемых, в апреля прошлого года этот показатель составлял 34.5%, позапрошлого — 33.1%. Доля Apache за год снизилась с 32.2% до %30.1, а доля Microsoft IIS снизилась с 5.6% до 4.8%. Доля Node.js увеличилась с 2.4% до 3.2%, а доля LiteSpeed с 11.8% до 12.9%.
Die bemerkenswertesten Verbesserungen, die im Rahmen der Hauptentwicklung des Branches 1.25.x hinzugefügt wurden:
- Das Modul ngx_http_v3 wurde mit experimenteller Unterstützung für das HTTP/3-Protokoll hinzugefügt. Für den Aufbau des Moduls gibt es die Option "--with-http_v3_module". HTTP/3 definiert die Verwendung des Protokolls QUIC (Quick UDP Internet Connections) als Transport für HTTP/2. QUIC ist ein Overlay über dem UDP-Protokoll, das die Multiplexierung mehrerer Verbindungen unterstützt und Methoden zur Verschlüsselung bietet, die TLS/SSL gleichwertig sind. Das Protokoll wurde 2013 von Google als Alternative zur Kombination von TCP+TLS für das Web entwickelt, um Probleme mit der hohen Verbindungsherstellungs- und Aushandlungszeit in TCP zu lösen sowie Verzögerungen beim Verlust von Paketen während der Datenübertragung zu beseitigen.
- Eine separate Direktive „http2“ wurde hinzugefügt, um das HTTP/2-Protokoll wahlweise für Server zu aktivieren (kann in einzelnen „server“-Blöcken verwendet werden). Der Parameter „http2“ in der Direktive „listen“ ist veraltet.
- Der Schutz gegen anomale Aktivitäten von HTTP/2-Clients, insbesondere gegen DoS-Attacken der Klasse "Rapid Reset", bei denen eine große Anzahl von sofort zurückgesetzten Streams innerhalb einer einzelnen HTTP/2-Verbindung erzeugt wird, wurde verstärkt. In der Standardkonfiguration stoßen derartige Angriffe auf das Limit für die Anzahl der Anfragen pro Verbindung "keepalive_requests" (nach jeweils 1000 Anfragen wird die Verbindung zurückgesetzt) und auf die Einschränkungen "limit_req". Um schneller auf Anfragen zu reagieren, die durch eine große Anzahl von Streams geflutet werden, wurde eine zusätzliche Einschränkung hinzugefügt, die standardmäßig nicht mehr als 256 (2 * max_concurrent_streams) neue Streams pro Ereignisverarbeitungsschleife zulässt. Diese neue Einschränkung ermöglicht es, Anfragen zu blockieren, bevor das Gesamtlimit für die Anzahl der gleichzeitigen Streams erreicht ist, beispielsweise wenn Streams asynchron verarbeitet oder zurückgesetzt werden.
- Der Stream-Modul unterstützt jetzt virtuellen Servern, deren Konfiguration im Block „server { … }“ mit 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 dazu dient, eingehende 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; } }
- Die Direktive listen im Stream-Modul implementiert die Unterstützung für die Parameter „deferred“ (aktiviert den verzögerten Accept), „accept_filter“ (Filter für eingehende Verbindungen, der vor dem Aufruf der Accept-Funktion angewendet wird) und „setfib“ (Festlegung der Routing-Tabelle).
- Für einige Architekturen wurde die Unterstützung zur Bestimmung der Blockgröße (Cache-Line), die für den Datenaustausch zwischen CPU-Cache und Speicher verwendet wird, implementiert.
- Verbesserte Verwaltung der Puffer, die bei der automatischen Erkennung von HTTP/2-Verbindungen verwendet werden.
- Die Leistung beim Start 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 Direktive „ssl“, die zuvor als veraltet erklärt wurde, wurde eingestellt.
Die stabile Version des FreeNginx-Projekts 1.26.0, das einen Fork von Nginx entwickelt, wurde vor zwei Wochen veröffentlicht. Der Fork wird von Maxim Dunin, einem der Hauptentwickler von Nginx, betrieben. FreeNginx wird als gemeinnütziges Projekt positioniert, das die Entwicklung der Codebasis von Nginx ohne kommerzielle Einflüsse gewährleisten soll.
Quelle: opennet.ru
