Dopo un anno di sviluppo, è stata rilasciata una nuova versione stabile del server HTTP ad alte prestazioni e del proxy mult протокольного nginx 1.30.0, che include le modifiche accumulate nella versione principale 1.29.x. In futuro, tutte le modifiche nella versione stabile 1.30 riguarderanno la risoluzione di gravi bug e vulnerabilità. A breve verrà formata la versione principale di nginx 1.31, nella quale continuerà lo sviluppo di nuove funzionalità. Per gli utenti comuni, che non devono garantire la compatibilità con moduli di terze parti, si consiglia di utilizzare la versione principale, sulla quale vengono rilasciate ogni tre mesi le versioni del prodotto commerciale Nginx Plus. Il codice di nginx è scritto in C e distribuito con licenza BSD.
Secondo il rapporto di febbraio di Netcraft, sono circa 321 milioni i siti web gestiti da nginx (245 milioni un anno fa, 243 milioni due anni fa e 289 milioni tre anni fa). Nginx è utilizzato dal 16,08% di tutti i siti attivi (17,89% un anno fa, 18,15% due anni fa e 18,94% tre anni fa), posizionandosi al secondo posto per popolarità in questa categoria (la quota di Apache è del 13,27% (16,03% un anno fa, 20,09% due anni fa, 20,52% tre anni fa), Cloudflare – 20,62% (17,81%, 14,12%, 11,32%), Google – 10,65% (9,89%, 10,41%, 9,89%).
Considerando tutti i siti, nginx mantiene la leadership con una quota di mercato del 22,65% (20,48% un anno fa, 22,31% due anni fa, 25,94% tre anni fa), mentre la quota di Apache è del 12,19% (16,03%, 20,17%, 20,58%), Cloudflare – 15,27% (12,87%, 11,24%, 10,17%), OpenResty (piattaforma basata su nginx e LuaJIT) – 8,01% (9,36%, 7,93%, 7,94%).
Tra i milioni di siti più visitati al mondo, nginx occupa il secondo posto con una quota del 19,85% (20,37% un anno fa, 20,63% due anni fa, 21,37% tre anni fa). Il primo posto è detenuto da Cloudflare – 26,84% (22,32%, 22,59%, 21,62%). La quota di Apache httpd è del 15,84% (17,95%, 20,09%, 21,18%). 
Secondo W3Techs, nginx è utilizzato dal 32,8% dei siti web tra i milioni più visitati (ad aprile dello scorso anno questo dato era del 33,8%, mentre due anni fa era del 34,3%). La quota di Apache è diminuita dal 26,3% al 23,9% nell'ultimo anno, quella di Microsoft IIS è scesa dal 4% al 3,4%, mentre quella di Caddy è passata dallo 0,3% allo 0,2%. La quota di Node.js è aumentata dal 4,4% al 6,0%, mentre quella di LiteSpeed è salita dal 14,6% al 15,2%.
I miglioramenti più significativi introdotti nel processo di sviluppo della branch principale 1.29.x:
- Aggiunta la supporto all'estensione TLS ECH (Encrypted ClientHello), che continua lo sviluppo dell'estensione ESNI (Encrypted Server Name Indication) e viene utilizzata per crittografare le informazioni sui parametri delle sessioni TLS, come il nome di dominio richiesto. La principale differenza fra ECH e ESNI è che in ECH, invece di crittografare i singoli campi, l'intero messaggio TLS ClientHello viene crittografato, bloccando così le perdite tramite campi non coperti da ESNI, come il campo PSK (Pre-Shared Key). L'uso di ECH viene attivato specificando nel file di configurazione ECHConfig l'opzione «ssl_ech_file» in formato PEM. Il supporto è disponibile utilizzando le build di OpenSSL con ECH.
- Aggiunta la supporto per il protocollo Multipath TCP (MPTCP), che consente di inviare pacchetti contemporaneamente su più percorsi attraverso diverse interfacce di rete. Per abilitarlo, è stato aggiunto il parametro «multipath» alla direttiva «listen».
- È stata aggiunta la possibilità di legare le sessioni dei clienti agli stessi server nel gruppo. Sono disponibili tre metodi: "cookie" — trasmissione dei dati sul selezionato server tramite il Cookie specificato; "route" — il server proxy assegna un percorso al cliente al ricevimento della prima richiesta; "learn" — nginx analizza le risposte dal server upstream e memorizza le sessioni avviate dal server. Per configurare il legame, nel blocco "upstream" del modulo "http" è stata aggiunta la direttiva "sticky", e sono stati aggiunti i parametri "route" e "drain" nella direttiva "server".
- È stata aggiunta la direttiva «early_hints» e implementato il supporto per il codice HTTP 103 nelle risposte dai backend proxy e gRPC. Il codice 103 consente di informare il cliente sul contenuto di alcuni header HTTP subito dopo la richiesta, senza aspettare che il server completi tutte le operazioni associate e inizi a restituire i contenuti. In questo modo è possibile comunicare suggerimenti su elementi correlati alla pagina che possono essere precaricati (ad esempio, possono essere forniti collegamenti ai CSS e JavaScript utilizzati nella pagina). Ricevendo informazioni su queste risorse, il browser inizia a caricarle senza attendere la conclusione della restituzione della pagina principale, riducendo così il tempo totale di elaborazione della richiesta.
- Aggiunte le direttive add_header_inherit e add_trailer_inherit, che consentono di modificare le regole di ereditarietà dei valori specificati nelle direttive add_header e add_trailer. Il parametro 'off' disabilita l'ereditarietà dei valori, mentre il parametro 'merge' include l'aggiunta dei valori dal livello precedente a quelli del livello attuale.
- È stata aggiunta la direttiva «ssl_certificate_compression» per controllare la compressione. certificati TLS..
- È stata aggiunta la direttiva max_headers, che limita il numero massimo di intestazioni HTTP in una richiesta. Se il limite viene superato, viene restituito un errore 400 (Bad Request). Questa funzionalità è stata trasferita da FreeNginx.
- Aggiunte le variabili $request_port e $is_request_port. La prima variabile contiene il numero di porta dall'URI o dall'intestazione 'Host', mentre la seconda contiene ':' se la variabile $request_port non è vuota.
- Aggiunte le variabili $ssl_sigalg e $ssl_client_sigalg, che contengono il nome dell'algoritmo di firma digitale per la connessione TLS.
- Nella direttiva «geo» è stato aggiunto il parametro «volatile», che disabilita la memorizzazione nella cache della variabile. Sono consentite maschere nella direttiva «include» specificata all'interno del blocco «geo».
- Nel blocco «upstream» è attivata per impostazione predefinita la direttiva «keepalive». Nella direttiva «keepalive» utilizzata nel blocco «upstream» è stato aggiunto il parametro «local». Specificando questo parametro, invece di condividere una connessione a un server upstream comune, menzionato in diversi blocchi location e server, per ciascun blocco viene mantenuta una connessione separata con l'upstream.
- Quando si utilizza in modalità proxy, per impostazione predefinita viene impostata la versione del protocollo HTTP/1.1 con l'attivazione della modalità keep-alive (nel modulo ngx_http_proxy_module è abilitato per impostazione predefinita il supporto keep-alive e il valore «1.1» è impostato nella direttiva «proxy_http_version», con interruzione dell'invio per impostazione predefinita dell'intestazione «Connection»).
- È stato aggiunto il supporto per il protocollo HTTP/2 al modulo ngx_http_proxy, consentendo di utilizzare HTTP/2 quando si accede ai backend.
- È stata introdotta la possibilità di caricare chiavi crittografiche da token hardware, utilizzando come provider la libreria OpenSSL.
- Nell'implementazione del protocollo QUIC è stato aggiunto il supporto per la modalità 0-RTT, disponibile sui sistemi con OpenSSL 3.5.1 e versioni più recenti.
- Aggiunta la possibilità di compilare con la libreria crittografica AWS-LC, sviluppata da Amazon.
- Per impostazione predefinita, la compressione dei certificati TLSv1.3 è disabilitata.
- Garantita la compatibilità con la libreria OpenSSL 4.0.
In aggiunta, si segnala la pubblicazione della release del progetto FreeNginx 1.30.0, un fork di Nginx in fase di sviluppo. Il fork è guidato da Maxim Dunin, uno dei principali sviluppatori di Nginx. FreeNginx si posiziona come un progetto non profit, garantendo lo sviluppo della codebase di Nginx senza interferenze aziendali. Il codice di FreeNginx continuerà ad essere fornito sotto licenza BSD. Tra le modifiche nella versione FreeNginx 1.30: è stata aggiunta la supporto per l'estensione TLS ECH (Encrypted Client Hello); migliorata la gestione della direttiva limit_rate; aggiunte le direttive send_min_rate e client_body_min_rate; implementata la possibilità di limitare il numero di connessioni e l'intensità delle richieste nel proxy per email; aggiunto il supporto per il database GeoIP2 nel modulo GeoIP; potenziata la sicurezza del modulo XSLT.
Fonte: opennet.ru
