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 raccoglie le modifiche accumulate nella versione principale 1.21.x. In futuro, tutte le modifiche nella versione stabile 1.22 saranno relative alla correzione di gravi bug e vulnerabilità. A breve sarà formata la versione principale nginx 1.23, in cui continueranno lo sviluppo di nuove funzionalità. Per gli utenti comuni, che non hanno l'esigenza di garantire la compatibilità con moduli di terze parti, si consiglia di utilizzare la versione principale, sulla quale ogni tre mesi vengono rilasciate versioni del prodotto commerciale Nginx Plus.
Secondo il rapporto di aprile dell'azienda Netcraft, nginx è utilizzato nel 20,08% di tutti i siti web attivi (un anno fa 20,15%, due anni fa 19,56%), il che corrisponde al secondo posto per popolarità in questa categoria (la quota di Apache è del 22,58% (un anno fa 25,38%), Cloudflare — 10,42% (8,51%), Google — 8,89% (10,09%). Considerando tutti i siti web, nginx mantiene la leadership con una quota del 31,13% del mercato (un anno fa 35,34%, due anni fa — 36,91%), mentre la quota di Apache è del 23,08% (25,98%), OpenResty (piattaforma basata su nginx e LuaJIT) — 8,01% (6,55%), Cloudflare — 5,49%, Microsoft IIS — 4% (5,96%).
Tra il milione di siti web più visitati al mondo, la quota di nginx è del 21,79% (un anno fa 23,06%, due anni fa 25,54%). Attualmente, circa 361 milioni di siti sono gestiti da nginx (un anno fa 419 milioni). Secondo W3Techs, nginx è utilizzato nel 33,5% dei siti tra i milioni più visitati; a maggio dello scorso anno questo valore era del 33,8%, due anni fa — 31,9%. La quota di Apache è diminuita nell'anno dal 33,8% al 31,5%, mentre la quota di Microsoft IIS è scesa dal 7% al 6%. La quota di LiteSpeed è aumentata dall'8,5% al 12,1%, mentre Node.js è salita dall'1,2% all'1,9%. In Russia, nginx è utilizzato nel 79,8% dei siti più visitati (un anno fa — 79,1%).
I miglioramenti più significativi aggiunti durante la formazione della versione principale 1.21.x:
- Nelle 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.
- Nel modulo proxy postale è stata aggiunta la supporto per la modalità «pipelining» per la trasmissione di più richieste POP3 o IMAP in una singola connessione, ed è stata aggiunta una nuova direttiva «max_errors» che definisce il numero massimo di errori di protocollo dopo il quale la connessione sarà chiusa.
- È stata implementata la trasmissione delle intestazioni «Auth-SSL-Protocol» e «Auth-SSL-Cipher» server per l'autenticazione del proxy della posta.
- Nel modulo stream è stata aggiunta la supporto per l'estensione TLS ALPN. Per determinare l'elenco dei protocolli supportati ALPN (h2, http/1.1) è stata proposta la direttiva ssl_alpn, e per ottenere informazioni sul protocollo ALPN concordato con il client, la variabile $ssl_alpn_protocol.
- Nel modulo stream è stato aggiunto il parametro «fastopen», che attiva la modalità «TCP Fast Open» per i socket in ascolto.
- È stata realizzata l'escapazione 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 durante la chiusura della connessione proxy TCP da una delle due parti («TCP half-close»).
- Nel modulo ngx_http_mp4_module è stata aggiunta una nuova direttiva mp4_start_key_frame per la trasmissione del flusso video, a partire dal fotogramma chiave.
- È stata aggiunta la variabile $ssl_curve, che restituisce il tipo di curva ellittica scelto 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() quando si utilizza OpenSSL 3.0.
- È stata abilitata di default la compilazione con la libreria PCRE2, che fornisce funzioni per l'elaborazione delle espressioni regolari.
- Durante il caricamento dei certificati server è stato attivato l'uso dei livelli di sicurezza supportati a partire da OpenSSL 1.1.0 e definiti tramite il parametro «@SECLEVEL=N» nella direttiva ssl_ciphers.
- È stata interrotta la supporto per il set di cifrature esportabili.
- Nell'API di filtraggio del corpo della richiesta è stata consentita la buffering dei dati elaborati.
- Sulla piattaforma FreeBSD è stata migliorata la supporto per la chiamata di sistema sendfile, destinata a organizzare il trasferimento diretto dei dati tra un descrittore di file e un socket. È stata costantemente attivata la modalità sendfile(SF_NODISKIO) e aggiunta la supporto per la modalità sendfile(SF_NOCACHE).
- È stata interrotta la supporto per l'instaurazione di connessioni HTTP/2 utilizzando l'estensione NPN (Next Protocol Negotiation) anziché ALPN.
- È stato garantito il blocco delle richieste HTTP/1.0 che includono l'intestazione HTTP «Transfer-Encoding» (introdotta nella versione del protocollo HTTP/1.1).
- Rafforzata la protezione contro gli attacchi di tipo «HTTP Request Smuggling» sui sistemi front-end e back-end, che consentono di infiltrarsi nei contenuti delle richieste di altri utenti, elaborate nello stesso flusso tra front-end e back-end. Nginx ora restituisce sempre un errore quando viene utilizzato il metodo CONNECT; quando vengono specificati simultaneamente gli header «Content-Length» e «Transfer-Encoding»; in presenza di spazi o caratteri di controllo nella stringa di richiesta, nel nome dell'header HTTP o nel valore dell'header «Host».
Fonte: opennet.ru
