După un an de dezvoltare, a fost publicată o nouă ramură stabilă a serverului HTTP de înaltă performanță și a serverului proxy multi-protocol nginx 1.26.0, care a acumulat modificările din ramura principală 1.25.x. În continuare, toate modificările din ramura stabilă 1.26 vor fi legate de corectarea erorilor grave și a vulnerabilităților. În curând va fi formată ramura principală nginx 1.27, în care va continua dezvoltarea de noi funcționalități. Utilizatorilor obișnuiți, care nu au sarcina de a asigura compatibilitatea cu modulele externe, li se recomandă să folosească ramura principală, pe baza căreia, o dată la trei luni, se formează versiuni ale produsului comercial Nginx Plus.
Conform raportului din martie al companiei Netcraft, aproximativ 243 milioane de site-uri sunt gestionate de nginx (cu un an în urmă, 289 milioane). Nginx este folosit pe 18.15% din toate site-urile active (cu un an în urmă 18.94%, acum doi ani 20.08%), care corespunde locului doi în popularitate în această categorie (cota Apache este de 20.09% (cu un an în urmă 20.52, acum doi ani 22.58), Cloudflare — 14.12% (11.32%, 10.42%), Google — 10.41% (9.89%, 8.89%). În plus, în analiza tuturor site-urilor, nginx își menține poziția de lider, având 22.31% din piață (cu un an în urmă 25.94%, acum doi ani — 31.13%), în timp ce cota Apache este de 20.17% (20.58, 23.08%), Cloudflare — 11.24% (10.17, 5.49%), OpenResty (platformă bazată pe nginx și LuaJIT) — 7.93% (7.94%, 8.01%).
Între cele mai vizitate un milion de site-uri din lume, cota nginx este de 20.63% (cu un an în urmă 21.37%, acum doi ani 21.79%), Cloudflare — 22.59% (cu un an în urmă 21.62%), Apache httpd — 20.09% (21.18%). Conform datelor W3Techs, nginx este folosit pe 34.3% din cele mai vizitate site-uri, iar în aprilie anul trecut acest indicator era de 34.5%, iar în urmă cu doi ani — 33.1%. Cota Apache a scăzut de la 32.2% la 30.1%, iar cota Microsoft IIS a scăzut de la 5.6% la 4.8%. Cota Node.js a crescut de la 2.4% la 3.2%, iar cota LiteSpeed a crescut de la 11.8% la 12.9%.
Cele mai notabile îmbunătățiri adăugate în procesul de formare a ramurii principale 1.25.x:
- A fost adăugat modulul ngx_http_v3 cu suport experimental pentru protocolul HTTP/3. Opțiunea '—with-http_v3_module' este disponibilă pentru a compila modulul. HTTP/3 definește utilizarea protocolului QUIC (Quick UDP Internet Connections) ca transport pentru HTTP/2. QUIC este o extensie a protocolului UDP, care suportă multiplexarea mai multor conexiuni și oferă metode de criptare echivalente cu TLS/SSL. Protocolul a fost creat în 2013 de Google ca o alternativă la combinația TCP+TLS pentru Web, rezolvând problemele cu timpii mari de stabilire și negociere a conexiunilor în TCP și eliminând întârzierile cauzate de pierderile de pachete în timpul transferului de date.
- A fost adăugată o directivă separată „http2” pentru activarea selectivă a protocolului HTTP/2 în legătură cu serverele (poate fi utilizată în blocuri separate „server”). Parametrul „http2” din directiva „listen” a fost declarat învechit.
- A fost consolidată protecția împotriva activității anormale a clienților HTTP/2, în special împotriva atacurilor DoS de tip „Rapid Reset”, în cadrul cărora se creează un număr mare de fluxuri care sunt imediat resetate într-o singură conexiune HTTP/2. În configurația implicită, astfel de atacuri sunt limitate de numărul de cereri pe conexiunea 'keepalive_requests' (după fiecare 1000 de cereri, conexiunea va fi resetată) și de restricțiile 'limit_req'. Pentru a reacționa mai rapid la inundarea cererilor printr-un număr mare de fluxuri, a fost adăugată o restricție suplimentară, care împiedică, în mod implicit, crearea a mai mult de 256 (2 * max_concurrent_streams) noi fluxuri în fiecare ciclu de procesare a evenimentelor. Noua restricție permite începerea blocării cererilor înainte de a atinge limita totală a numărului de fluxuri simultane, de exemplu, atunci când fluxurile sunt procesate asincron sau resetate.
- Suport pentru modulul stream a fost adăugat servere virtuale, a cărui configurație este definită în blocul 'server { … }' prin directiva server_name. server { server_name ~^(www\.)?(.+)$; proxy_pass www.$2:12345; }
- A fost adăugat un nou modul ngx_stream_pass_module, destinat pentru a direcționa conexiunile primite direct către orice socket ascultător asociat cu module precum http, stream și mail. stream { server { listen 12345 ssl; ssl_certificate domain.crt; ssl_certificate_key domain.key; pass 127.0.0.1:8000; } }
- În directiva listen a modulului stream a fost implementat suport pentru parametrii 'deferred' (activează acceptarea întârziată), 'accept_filter' (filtru pentru conexiunile de inbound, aplicat înainte de apelarea funcției accept) și 'setfib' (setarea tabelului de rutare).
- Pentru unele arhitecturi, a fost implementat suportul pentru determinarea dimensiunii blocului (cache line) utilizat pentru transferul de date între cache-ul CPU și memorie.
- A fost îmbunătățită gestionarea bufferelor utilizate la determinarea automată a conexiunilor HTTP/2.
- A fost crescută performanța lansării configurațiilor cu un număr mare de directive „location”.
- Suportul pentru tehnologia Server push în HTTP/2 a fost eliminat.
- Suportul pentru directiva „ssl”, care a fost declarată învechită, a fost oprit.
Lansarea stabilă a proiectului FreeNginx 1.26.0, un fork al Nginx, a fost publicată cu două săptămâni în urmă. Fork-ul este dezvoltat de Maxim Dunin, unul dintre dezvoltatorii cheie ai Nginx. FreeNginx se poziționează ca un proiect non-profit, asigurând dezvoltarea bazei de cod Nginx fără intervenții corporative.
Sursa: opennet.ro
