Po roce vývoje byla zveřejněna nová stabilní verze vysoce výkonného HTTP serveru a vícenávrhového proxy serveru nginx 1.28.0, která zahrnuje změny shromážděné v hlavní větvi 1.27.x. V budoucnu budou všechny změny ve stabilní větvi 1.28 zaměřeny na opravy závažných chyb a zranitelností. Brzy bude vytvořena hlavní větev nginx 1.29, ve které 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 březnové zprávy společnosti Netcraft hostuje nginx přibližně 245 milionů webů (před rokem 243 milionů, před dvěma lety 289 milionů). Nginx se používá na 17,89 % všech aktivních webů (před rokem 18,15 %, před dvěma lety 18,94 %), což odpovídá prvnímu místu v této kategorii (podíl Apache je 16,03 % (před rokem 20,09 %, před dvěma lety 20,52 %), Cloudflare — 17,81 % (14,12 %, 11,32 %), Google — 9,89 % (10,41 %, 9,89 %).
Při zohlednění všech webů si nginx i nadále udržuje vedoucí postavení a zaujímá 20,48 % trhu (před rokem 22,31 %, před dvěma lety — 25,94 %), zatímco podíl Apache odpovídá 16,03 % (20,17 %, 20,58 %), Cloudflare — 12,87 % (11,24 %, 10,17 %), OpenResty (platforma založená na nginx a LuaJIT) — 9,36 % (7,93 %, 7,94 %).
Mezi milionem nejnavštěvovanějších webů na světě si nginx drží druhé místo s podílem 20,37 % (před rokem 20,63 %, před dvěma lety 21,37 %). První místo zaujímá Cloudflare — 22,32 % (před rokem 22,59 %, před dvěma lety 21,62 %). Podíl Apache httpd — 17,95 % (20,09 %, 21,18 %).
Podle údajů W3Techs je nginx používán na 33,8 % webů z milionu nejnavštěvovanějších (v dubnu loňského roku tento podíl činil 34,3 %, předloni 34,5 %). Podíl Apache za rok klesl z 30,1 % na 26,3 %, zatímco podíl Microsoft IIS se snížil z 5 % na 4 %. Podíl Node.js vzrostl z 3,2 % na 4,4 %, a podíl LiteSpeed vzrostl z 12,9 % na 14,6 %.
Nejvýraznější vylepšení přidaná během vytváření hlavní větve 1.27.x:
- Pro spojení využívající protokol QUIC byla přidána podpora algoritmu pro řízení síťového přetížení CUBIC (RFC 9438), jehož funkce spočívá v postupném zvyšování velikosti okna přetížení, dokud nedojde ke ztrátě paketů, po níž se velikost okna vrací na hodnotu před ztrátou. V provedených testech použití CUBIC umožnilo snížit čas přenosu souboru o velikosti 500 MB o 24 % při zpoždění 40 ms a BDP 750K (Bandwidth Delay Product) a o 73 % při zpoždění 100 ms a BDP 9M.
- Do modulu stream byla přidána podpora pro ověřování revokace certifikátů klientů pomocí protokolu OCSP (Online Certificate Status Protocol).
- V modulu stream byla implementována podpora techniky ověřování revokace certifikátů OCSP Stapling, jejíž podstatou je, že během sjednávání TLS spojení je certifikátem podepsaná odpověď OCSP předávána serverem spravujícím web bez nutnosti přímého kontaktu s certifikačním úřadem.
- Při spuštění a aktualizaci konfigurace bylo implementováno kešování SSL certifikátů, klíčů a CRL (Seznamy odvolaných certifikátů).
- Byly přidány funkce ke snížení spotřeby zdrojů a zmenšení zátěže CPU při používání TLS v konfiguracích s velkým počtem bloků server a location. Přidané změny umožňují místo vytváření samostatného SSL kontextu (SSL_CTX v OpenSSL) pro každý konfigurační blok využít již existující SSL kontext z nadřazeného bloku.
- V direktivě „ssl_client_certificate“ byla zajištěna podpora certifikátů s dodatečnými informacemi.
- Pro ověřování klientských SSL certifikátů již direktiva „ssl_client_certificate“ není povinná.
- Do modulu ngx_mail_proxy_module byla přidána podpora specifického režimu IMAP LOGIN pro SmarterMail s netagovanou odpovědí CAPABILITY.
- Do modulu ngx_http_proxy_module byla přidána direktiva „proxy_pass_trailers“, která umožňuje přenos hlavičkových polí na konci odpovědi od proxovaného serveru k klientovi.
- Do direktivy „server“, používané v bloku „upstream“, byla přidána podpora parametru „resolve“, který zahrnuje sledování změn IP adres pro používané doménové jméno a automatické aktualizace konfigurace bloku „upstream“ bez nutnosti restartu nginx v případě změny adresy.
- Byla přidána možnost použití proměnných v direktivách „proxy_limit_rate“, „fastcgi_limit_rate“, „scgi_limit_rate“ a „uwsgi_limit_rate“.
- V direktivách „proxy_bind“, „fastcgi_bind“, „grpc_bind“, „memcached_bind“, „scgi_bind“ a „uwsgi_bind“, stejně jako jako adresa klienta v modulu ngx_http_realip_module bylo povoleno uvádět IPv6 adresy v kulatých závorkách bez čísla portu.
- Byla přidána direktiva „keepalive_min_timeout“, která určuje časový limit, během kterého nginx nebude uzavírat keep-alive spojení s klientem.
- Ve výchozím nastavení jsou odpojeny protokoly TLSv1 a TLSv1.1.
- Byly vyřešeny problémy s dlouhým načítáním konfiguračních souborů kvůli opakovanému parsování stejného souboru TLS certifikátů, klíčů a seznamů certifikačních autorit. Rychlost restartu konfigurace byla zvýšena díky opětovnému použití neměnných TLS objektů, jako jsou certifikáty, klíče a CRL. Byla přidána direktiva „ssl_object_cache_inheritable“ pro zakázání dědění objektů při aktualizaci konfigurace.
- Byl přidán cache pro certifikáty a klíče načítané pomocí proměnných v direktivách (např. „ssl_certificate \/etc\/ssl\/$ssl_server_name.crt“). Pro správu cache byly přidány direktivy „ssl_certificate_cache“, „proxy_ssl_certificate_cache“, „grpc_ssl_certificate_cache“ a „uwsgi_ssl_certificate_cache“. Pomocí těchto direktiv lze nastavit maximální velikost cache, čas platnosti záznamů a čas na vyčištění nepotřebných záznamů. Například: „ssl_certificate_cache max=1000 inactive=20s valid=1m;“.
- Byla snížena spotřeba paměti při zpracování dlouhotrvajících požadavků v konfiguracích, kde se používají direktivy „gzip“, „gunzip“, „ssi“, „sub_filter“ nebo „grpc_pass“.
- Maximální velikost cacheovaných v sdílené paměti SSL sezení byla zvýšena na 8192.
- Byla zajištěna kompilace s C knihovnou Musl.
- Byla provedena optimalizace výkonu a odstranění chyb v implementaci HTTP/3.
Dále můžeme zmínit vydání verze projektu FreeNginx 1.28.0, který je forkem Nginx. Vývoj fork vykonává Maxim Dunin, jeden z klíčových vývojářů Nginx. FreeNginx se prezentuje jako neziskový projekt, který zajišťuje vývoj kódové základny Nginx bez korporátního zásahu. Mezi specifické změny ve větvi FreeNginx 1.28 patří:
- Parametr „off“ v direktivě „pid“, který vypíná vytváření PID souboru.
- Omezení intenzity zapisování zpráv do chybového logu pro ochranu před zaplněním logu běžnými zprávami.
- Implementace parametru multipath v direktivě listen pro podporu Multipath TCP.
- Podpora HTTP hlavičky „Age“ pro určení doby života záznamů v cache.
- Přidání metod autentizace XOAUTH2 a OAUTHBEARER do modulu mail_proxy.
Zdroj: opennet.ru
