După un an de dezvoltare, a fost lansată o nouă ramură stabilă a serverului HTTP de înaltă performanță și a proxy-ului multi-protocol nginx 1.30.0, care a reunit modificările acumulate în ramura principală 1.29.x. În continuare, toate modificările în ramura stabilă 1.30 vor fi concentrate pe eliminarea erorilor grave și a vulnerabilităților. În curând va fi formată ramura principală nginx 1.31, în care vor continua dezvoltarea de noi funcționalități. Utilizatorilor obișnuiți, care nu trebuie să asigure compatibilitatea cu module externe, li se recomandă utilizarea ramurii principale, pe baza căreia se generează o dată la trei luni versiuni ale produsului comercial Nginx Plus. Codul nginx este scris în limbajul C și este distribuit sub licența BSD.
Conform raportului din februarie al companiei Netcraft, aproximativ 321 milioane de site-uri sunt gestionate de nginx (cu un an în urmă 245 milioane, acum doi ani – 243 milioane, acum trei ani 289 milioane). Nginx este utilizat pe 16.08% din toate site-urile active (cu un an în urmă 17.89%, acum doi ani 18.15%, acum trei ani 18.94%), ceea ce corespunde locului doi în popularitate în această categorie (cota Apache este de 13.27% (cu un an în urmă 16.03%, acum doi ani 20.09%, acum trei ani 20.52%), Cloudflare – 20.62% (17.81%, 14.12%, 11.32%), Google – 10.65% (9.89%, 10.41%, 9.89%).
Atunci când se iau în considerare toate site-urile, nginx își menține poziția de lider și ocupă 22.65% din piață (cu un an în urmă 20.48%, acum doi ani – 22.31%, acum trei ani – 25.94%), în timp ce cota Apache este de 12.19% (16.03%, 20.17%, 20.58%), Cloudflare – 15.27% (12.87%, 11.24%, 10.17%), OpenResty (platformă bazată pe nginx și LuaJIT) – 8.01% (9.36%, 7.93%, 7.94%).
Printre cele mai vizitate un milion de site-uri din lume, nginx ocupă locul doi cu o cotă de 19.85% (cu un an în urmă 20.37%, acum doi ani 20.63%, acum trei ani 21.37%). Locul întâi este deținut de Cloudflare – 26.84% (22.32%, 22.59%, 21.62%). Cota Apache httpd este de 15.84% (17.95%, 20.09%, 21.18%). 
Conform datelor W3Techs, nginx este utilizat pe 32.8% din cele mai vizitate un milion de site-uri (în aprilie anul trecut, acest indicator era de 33.8%, iar acum doi ani – 34.3%). Cota Apache a scăzut în ultimul an de la 26.3% la 23.9%, cota Microsoft IIS a scăzut de la 4% la 3.4%, iar cota Caddy de la 0.3% la 0.2%. Cota Node.js a crescut de la 4.4% la 6.0%, iar cota LiteSpeed de la 14.6% la 15.2%.
Cele mai notabile îmbunătățiri adăugate în procesul de formare a ramurii principale 1.29.x:
- A fost adăugat suport pentru extensia TLS ECH (Encrypted ClientHello), care continuă dezvoltarea extensiei ESNI (Encrypted Server Name Indication) și este folosită pentru criptarea informațiilor despre parametrii sesiunilor TLS, cum ar fi numele de domeniu solicitat. Principala diferență dintre ECH și ESNI este că, în ECH, întreaga comunicare TLS ClientHello este criptată, nu doar unele câmpuri, ceea ce ajută la prevenirea scurgerilor de informații prin câmpuri neprotejate de ESNI, cum ar fi câmpul PSK (Pre-Shared Key). Utilizarea ECH se activează prin specificarea în directiva „ssl_ech_file” a fișierului de configurare ECHConfig în format PEM. Suportul este disponibil pentru versiunile OpenSSL care includ ECH.
- A fost adăugată suportul pentru protocolul Multipath TCP (MPTCP), care permite livrarea pachetelor simultan pe mai multe rute prin diverse interfețe de rețea. Pentru activare, a fost adăugat parametrul „multipath” în directiva „listen”.
- A fost adăugată posibilitatea de a lega sesiunile clienților de aceleași servere din grup. Sunt disponibile trei metode: „cookie” – transmiterea datelor despre selecția anumitor servere, server prin intermediul unui cookie specificat; „route” – serverul proxy assignă un traseu clientului la primirea primei cereri; „learn” – nginx analizează răspunsurile de la serverul upstream și reține sesiunile inițiate de server. Pentru configurarea legării, în blocul „upstream” al modulului „http” a fost adăugată directiva „sticky”, iar în directiva „server” au fost adăugate parametrii „route” și „drain”.
- A fost adăugată directiva „early_hints” și implementată suportul pentru codul HTTP 103 în răspunsurile de la backend-urile proxy și gRPC. Codul 103 permite informarea clientului despre conținutul unor anumite coduri HTTP imediat după solicitare, fără a aștepta ca serverul să execute toate operațiunile legate de cerere și să înceapă livrarea conținutului. În acest mod, se pot oferi sugestii despre elementele legate de pagina livrată, care pot fi preîncărcate (de exemplu, pot fi oferite linkuri către fișierele css și javascript utilizate pe pagină). Odată ce browserul primește informații despre resursele respective, acesta va începe să le încarce fără a aștepta finalizarea livrării paginii principale, ceea ce permite reducerea timpului total de procesare a cererii.
- Au fost adăugate directivele add_header_inherit și add_trailer_inherit, care permit modificarea regulilor de moștenire a valorilor specificate în directivele add_header și add_trailer. Parametrul „off” anulează moștenirea valorilor, iar parametrul „merge” include adăugarea valorilor de la nivelul anterior la valorile de la nivelul curent.
- A fost adăugată directive «ssl_certificate_compression» pentru a controla compresia. certificatelor TLS.
- A fost adăugată directiva max_headers, care limitează numărul maxim de antete HTTP într-o cerere. În cazul depășirii limitei, se returnează eroarea 400 (Bad Request). Această capacitate a fost transferată din FreeNginx.
- Au fost adăugate variabilele $request_port și $is_request_port. Prima variabilă conține numărul portului din componenta URI sau din antetul „Host”, iar a doua conține „:”, dacă variabila $request_port nu este goală.
- Au fost adăugate variabilele $ssl_sigalg și $ssl_client_sigalg, care conțin denumirea algoritmului de generare a semnăturii digitale pentru conexiunea TLS.
- În directiva „geo” a fost adăugat parametrul „volatile”, care dezactivează cache-ul pentru variabilă. Este permisă utilizarea măștilor în directiva „include”, specificată în interiorul blocului „geo”.
- În blocul „upstream”, directiva „keepalive” este activată implicit. La directiva „keepalive” utilizată în blocul „upstream”, a fost adăugat parametrul „local”. Atunci când acest parametru este specificat, în loc de utilizarea unei singure conexiuni la serverul upstream comun, menționat în diferite blocuri location și server, se menține o conexiune separată la upstream pentru fiecare bloc.
- Când este utilizat în modul proxy, versiunea protocoalelor este setată implicit la HTTP/1.1 cu activarea modului keep-alive (în modul ngx_http_proxy_module, suportul pentru keep-alive este activat implicit, iar valoarea „1.1” este stabilită în directiva „proxy_http_version”, fiind oprită trimiterea implicită a antetului „Connection”).
- Modulul ngx_http_proxy a adăugat suport pentru protocolul HTTP/2, permițând utilizarea HTTP/2 atunci când se face referire la backend-uri.
- A fost oferită posibilitatea de a încărca chei criptografice din tokenuri hardware, folosind ca provider biblioteca OpenSSL.
- În implementarea protocolului QUIC, a fost adăugată suport pentru modul 0-RTT, disponibil pe sistemele cu OpenSSL 3.5.1 și versiunile mai recente.
- A fost adăugată posibilitatea compilării cu biblioteca criptografică AWS-LC, dezvoltată de compania Amazon.
- Compresia certificatelor TLSv1.3 este dezactivată în mod implicit.
- Compatibilitatea cu biblioteca OpenSSL 4.0 este asigurată.
De asemenea, se poate menționa lansarea versiunii 1.30.0 a proiectului FreeNginx, care dezvoltă un fork Nginx. Dezvoltarea fork-ului este condusă de Maxim Dunin, unul dintre dezvoltatorii-cheie ai Nginx. FreeNginx este poziționat ca un proiect non-profit, oferind dezvoltarea bazei de cod Nginx fără intervenție corporativă. Codul FreeNginx continuă să fie livrat sub licența BSD. Printre schimbările din ramura FreeNginx 1.30: a fost adăugată suportul pentru extensia TLS ECH (Encrypted Client Hello); s-au îmbunătățit gestionarea directivei limit_rate; au fost adăugate directiva send_min_rate și client_body_min_rate; a fost implementată posibilitatea de a limita numărul de conexiuni și intensitatea cererilor în proxy-ul de email; a fost adăugat suportul pentru baza de date GeoIP2 în modul GeoIP; a fost întărită securitatea modulului XSLT.
Sursa: opennet.ro
