Dopo 13 mesi di sviluppo, è stata presentata una nuova versione stabile del server HTTP ad alte prestazioni e del proxy multi-protocollo nginx 1.22.0, che incorpora le modifiche accumulate nella ramo principale 1.21.x. In futuro, tutte le modifiche nella ramo stabile 1.22 saranno collegate alla correzione di gravi bug e vulnerabilità. A breve sarà formata la ramo principale nginx 1.23, nella quale continuerà lo sviluppo di nuove funzionalità. Per gli utenti comuni, che non hanno il compito di garantire la compatibilità con moduli di terze parti, si raccomanda di utilizzare la ramo principale, sulla quale vengono rilasciate versioni del prodotto commerciale Nginx Plus ogni tre mesi.
Secondo il rapporto di aprile di Netcraft, nginx è utilizzato nel 20.08% di tutti i siti attivi (rispetto al 20.15% di un anno fa e al 19.56% di due anni fa), posizionandosi al secondo posto nella popolarità in questa categoria (la quota di Apache è al 22.58% (25.38% un anno fa), Cloudflare al 10.42% (8.51%), Google all'8.89% (10.09%). In considerazione di tutti i siti, nginx mantiene la leadership con una quota del 31.13% del mercato (35.34% un anno fa, 36.91% due anni fa), mentre la quota di Apache è al 23.08% (25.98%), OpenResty (piattaforma basata su nginx e LuaJIT) all'8.01% (6.55%), Cloudflare al 5.49% e Microsoft IIS al 4% (5.96%).
Tra i milioni di siti più visitati al mondo, la quota di nginx è del 21.79% (23.06% un anno fa, 25.54% due anni fa). Attualmente, circa 361 milioni di siti operano sotto nginx (419 milioni un anno fa). Secondo i dati di W3Techs, nginx è utilizzato nel 33.5% dei siti tra i milioni più visitati, mentre a maggio dello scorso anno questo valore era del 33.8%, e due anni fa del 31.9%. La quota di Apache è scesa nel corso dell'anno dal 33.8% al 31.5%, mentre la quota di Microsoft IIS è diminuita dal 7% al 6%. La quota di LiteSpeed è aumentata dall'8.5% al 12.1%, e quella di Node.js dall'1.2% all'1.9%. In Russia, nginx è utilizzato nel 79.8% dei siti più visitati (79.1% un anno fa).
I principali miglioramenti apportati nel processo di sviluppo della versione principale 1.21.x:
- Nei direttive «proxy_ssl_certificate», «proxy_ssl_certificate_key», «grpc_ssl_certificate», «grpc_ssl_certificate_key», «uwsgi_ssl_certificate» e «uwsgi_ssl_certificate_key» è stata aggiunta la supporto per le variabili.
- È stata aggiunta al modulo proxy di posta la supporto per la modalità «pipelining» che consente di inviare più richieste POP3 o IMAP in una singola connessione; inoltre, è stata introdotta la nuova direttiva «max_errors», che definisce il numero massimo di errori di protocollo dopo il quale la connessione verrà chiusa.
- Implementata la trasmissione degli header «Auth-SSL-Protocol» e «Auth-SSL-Cipher» server per l'autenticazione del proxy di posta.
- Nel modulo stream è stata aggiunta la supporto per l'estensione TLS ALPN. Per determinare l'elenco dei protocolli supportati da ALPN (h2, http/1.1) è stata proposta la direttiva ssl_alpn, mentre per ottenere informazioni sul protocollo ALPN concordato con il client è disponibile la variabile $ssl_alpn_protocol.
- Nel modulo stream è stato aggiunto il parametro «fastopen», che abilita la modalità «TCP Fast Open» per i socket in ascolto.
- È stata implementata l'escapatura dei caratteri «»», «», «\», «^», «`», «{«, «|» e «}» durante il proxying con modifica dell'URI.
- Nel modulo stream è stata aggiunta la direttiva proxy_half_close, che consente di configurare il comportamento alla chiusura della connessione TCP proxy da una delle parti ("TCP half-close").
- Nel modulo ngx_http_mp4_module è stata aggiunta una nuova direttiva mp4_start_key_frame per lo streaming video a partire da un fotogramma chiave.
- È stata aggiunta la variabile $ssl_curve, che restituisce il tipo di curva ellittica scelta per la negoziazione delle chiavi nella sessione TLS.
- Nella direttiva "sendfile_max_chunk" il valore predefinito è stato modificato a 2 megabyte;
- È stata garantita la compatibilità con la libreria OpenSSL 3.0. È stata aggiunta la supporto per la chiamata SSL_sendfile() utilizzando OpenSSL 3.0.
- È stata inclusa per impostazione predefinita la build con la libreria PCRE2, che fornisce funzioni per l'elaborazione di espressioni regolari.
- Durante il caricamento dei certificati server è stata implementata l'utilizzazione dei livelli di sicurezza supportati a partire da OpenSSL 1.1.0, specificabili tramite il parametro "@SECLEVEL=N" nella direttiva ssl_ciphers.
- È stata interrotta la supporto per il set di cifrari esportabili.
- Nell'API di filtraggio del corpo della richiesta è stata consentita la memorizzazione nella cache dei dati elaborati.
- Sulla piattaforma FreeBSD è stato migliorato il supporto per la syscall sendfile, progettata per gestire il trasferimento diretto di dati tra un descrittore di file e un socket. È sempre attivata la modalità sendfile(SF_NODISKIO) e è stato aggiunto il supporto per la modalità sendfile(SF_NOCACHE).
- È stata interrotta la supporto per l'installazione di connessioni HTTP/2 utilizzando l'estensione NPN (Next Protocol Negotiation) invece di ALPN.
- È stata implementata la disattivazione delle richieste HTTP/1.0 che includono l'intestazione HTTP 'Transfer-Encoding' (introdotta nella versione del protocollo HTTP/1.1).
- È stata potenziata la protezione contro gli attacchi di tipo 'HTTP Request Smuggling' su sistemi front-end-backend, che consentono di infiltrarsi nei contenuti delle richieste di altri utenti, elaborate nella stessa linea tra front-end e backend. Nginx ora restituisce sempre un errore quando viene utilizzato il metodo CONNECT; in caso di specifica simultanea delle intestazioni 'Content-Length' e 'Transfer-Encoding'; in presenza di spazi o caratteri di controllo nella stringa della richiesta, nel nome dell'intestazione HTTP o nel valore dell'intestazione 'Host'.
Fonte: opennet.ru
