Po 13 měsících vývoje byla představena nová stabilní verze vysoce výkonného HTTP serveru a víceprotokolového proxy serveru nginx 1.22.0, která zahrnuje změny nashromážděné v hlavní větvi 1.21.x. V budoucnu budou všechny změny ve stabilní větvi 1.22 zaměřeny na odstranění závažných chyb a zranitelností. V brzké době bude vytvořena hlavní větev nginx 1.23, v níž bude pokračovat vývoj nových funkcí. Pro běžné uživatele, kteří nemají za úkol zajistit kompatibilitu s externími moduly, se doporučuje používat hlavní větev, na jejímž základě se každé tři měsíce vytvářejí vydání komerčního produktu Nginx Plus.
Podle dubnové zprávy společnosti Netcraft se nginx používá na 20,08 % všech aktivních webových stránek (před rokem 20,15 %, před dvěma lety 19,56 %), což odpovídá druhému místu v oblíbenosti v této kategorii (podíl Apache je 22,58 % (před rokem 25,38 %), Cloudflare — 10,42 % (8,51 %), Google — 8,89 % (10,09 %). Přičemž pokud se zohlední všechny webové stránky, nginx si nadále udržuje vedoucí pozici a má 31,13 % podílu na trhu (před rokem 35,34 %, před dvěma lety — 36,91 %), zatímco podíl Apache činí 23,08 % (25,98 %), OpenResty (platforma založená na nginx a LuaJIT) — 8,01 % (6,55 %), Cloudflare — 5,49 %, Microsoft IIS — 4 % (5,96 %).
Mezi milionem nejnavštěvovanějších webových stránek na světě činí podíl nginx 21,79 % (před rokem 23,06 %, před dvěma lety 25,54 %). V současné době je pod nginxem provozováno přibližně 361 milionů webových stránek (před rokem 419 milionů). Podle údajů W3Techs je nginx používán na 33,5 % webových stránek z milionu nejnavštěvovanějších, v květnu minulého roku tento údaj činil 33,8 %, před dvěma lety — 31,9 %. Podíl Apache za rok poklesl z 33,8 % na 31,5 %, a podíl Microsoft IIS z 7 % na 6 %. Podíl LiteSpeed vzrostl z 8,5 % na 12,1 %, a Node.js z 1,2 % na 1,9 %. V Rusku se nginx používá na 79,8 % nejnavštěvovanějších webových stránek (před rokem — 79,1 %).
Nejvýznamnější vylepšení, která byla přidána během formování hlavní větve 1.21.x:
- Do direktiv „proxy_ssl_certificate“, „proxy_ssl_certificate_key“, „grpc_ssl_certificate“, „grpc_ssl_certificate_key“, „uwsgi_ssl_certificate“ a „uwsgi_ssl_certificate_key“ byla přidána podpora proměnných.
- Do modulu pro proxy poštu byla přidána podpora režimu „pipelining“ pro přenos několika požadavků POP3 nebo IMAP v jednom spojení, a byla přidána nová direktiva „max_errors“, která určuje maximální počet chyb protokolu, po jehož překročení bude spojení uzavřeno.
- Byla realizována transmisce hlaviček „Auth-SSL-Protocol“ a „Auth-SSL-Cipher“ serveru autentizace poštovního proxy.
- Do modulu stream byla přidána podpora pro TLS rozšíření ALPN. Pro určení seznamu podporovaných protokolů ALPN (h2, http/1.1) byla navržena direktiva ssl_alpn a pro získání informací o dohodnutém protokolu ALPN s klientem byl přidán proměnná $ssl_alpn_protocol.
- Do modulu stream byl přidán parametr „fastopen“, který zapíná režim „TCP Fast Open“ pro naslouchající sokety.
- Bylo zajištěno Escapování znaků „»“, „«“, „\“, „^“, „`“, „{„, „|“ a „}“ při proxy s modifikací URI.
- Do modulu stream byla přidána direktiva proxy_half_close, umožňující nastavit chování při uzavření proxy spojení TCP na jedné straně („TCP half-close“).
- Do modulu ngx_http_mp4_module byla přidána nová direktiva mp4_start_key_frame pro streamování videa, počínaje klíčovým snímkem.
- Byla přidána proměnná $ssl_curve, která vrací typ eliptické křivky vybrané pro dohodu o klíčích v relaci TLS.
- Ve direktivě „sendfile_max_chunk“ byla výchozí hodnota změněna na 2 megabajty.
- Byla zajištěna kompatibilita s knihovnou OpenSSL 3.0. Přidána podpora pro volání SSL_sendfile() při použití OpenSSL 3.0.
- Ve výchozím nastavení byla zahrnuta sestavení s knihovnou PCRE2, která poskytuje funkce pro zpracování regulárních výrazů.
- Při nahrávání certifikátů serveru bylo zajištěno použití bezpečnostních úrovní dostupných od OpenSSL 1.1.0, které se nastavují pomocí parametru „@SECLEVEL=N“ v direktivě ssl_ciphers.
- Byla ukončena podpora exportní sady šifrování.
- V API pro filtrování těla požadavku byla povolena vyrovnávací paměť zpracovaných dat.
- Na platformě FreeBSD byla vylepšena podpora systémového volání sendfile, určeného pro přímý přenos dat mezi souborovým deskriptor a soketem. Režim sendfile(SF_NODISKIO) je trvale zapnutý a byla přidána podpora režimu sendfile(SF_NOCACHE).
- Byla ukončena podpora pro vytváření HTTP/2 spojení s používáním rozšíření NPN (Next Protocol Negotiation) namísto ALPN.
- Bylo zajištěno blokování požadavků HTTP/1.0, které zahrnují HTTP hlavičku „Transfer-Encoding“ (která se objevila ve verzi protokolu HTTP/1.1).
- Byla posílena ochrana proti útokům typu „HTTP Request Smuggling“ na systémy front-end-backend, které umožňují zasahovat do obsahu požadavků dalších uživatelů zpracovávaných ve stejném proudu mezi front-endem a backendem. Nginx nyní vždy vrací chybu při použití metody CONNECT; při současném nastavení hlaviček „Content-Length“ a „Transfer-Encoding“; při přítomnosti mezer nebo řídicích znaků v řetězci požadavku, jménu HTTP hlavičky nebo v hodnotě hlavičky „Host“.
Zdroj: opennet.ru
