Uscita di nginx 1.26.0 con supporto per HTTP/3

Dopo un anno di sviluppo, è stata pubblicata una nuova versione stabile del server HTTP ad alte prestazioni e del proxy multi-protocollo nginx 1.26.0, che incorpora le modifiche accumulate nel ramo principale 1.25.x. In futuro, tutte le modifiche nel ramo stabile 1.26 saranno dedicate alla correzione di gravi errori e vulnerabilità. A breve verrà formata la versione principale di nginx 1.27, in cui continuerà lo sviluppo di nuove funzionalità. Per gli utenti comuni, che non devono garantire la compatibilità con moduli di terze parti, si raccomanda di utilizzare il ramo principale, su cui ogni tre mesi vengono pubblicate le versioni del prodotto commerciale Nginx Plus.

Secondo il rapporto di marzo della società Netcraft, circa 243 milioni di siti web (rispetto ai 289 milioni di un anno fa) sono gestiti da nginx. Nginx è utilizzato nel 18.15% di tutti i siti web attivi (rispetto all'18.94% di un anno fa, e al 20.08% di due anni fa), il che corrisponde al secondo posto in termini di popolarità in questa categoria (la quota di Apache è pari al 20.09% (20.52% un anno fa, 22.58% due anni fa), Cloudflare - 14.12% (11.32%, 10.42%), Google - 10.41% (9.89%, 8.89%). Considerando tutti i siti, nginx mantiene il primato con una quota di mercato del 22.31% (rispetto al 25.94% di un anno fa e al 31.13% di due anni fa), mentre la quota di Apache è del 20.17% (20.58, 23.08), Cloudflare - 11.24% (10.17, 5.49%), OpenResty (piattaforma basata su nginx e LuaJIT) - 7.93% (7.94%, 8.01%).

Tra i milioni di siti web più visitati al mondo, nginx detiene una quota del 20,63% (l'anno scorso era 21,37%, due anni fa 21,79%), Cloudflare è al 22,59% (l'anno scorso 21,62%), Apache httpd al 20,09% (21,18%). Secondo i dati di W3Techs, nginx è utilizzato sul 34,3% dei siti tra i milioni più visitati; ad aprile dell'anno scorso questo valore era del 34,5%, e quello precedente del 33,1%. La quota di Apache è diminuita nell'ultimo anno dal 32,2% al 30,1%, mentre quella di Microsoft IIS è scesa dal 5,6% al 4,8%. La quota di Node.js è aumentata dal 2,4% al 3,2%, mentre quella di LiteSpeed è passata dall'11,8% al 12,9%.

Miglioramenti più significativi aggiunti nel processo di sviluppo del ramo principale 1.25.x:

  • È stato aggiunto il modulo ngx_http_v3 con supporto sperimentale per il protocollo HTTP/3. Per compilare il modulo, è prevista l'opzione «—with-http_v3_module». HTTP/3 definisce l'uso del protocollo QUIC (Quick UDP Internet Connections) come trasporto per HTTP/2. QUIC è un'estensione del protocollo UDP, che supporta il multiplexing di più collegamenti e fornisce metodi di crittografia equivalenti a TLS/SSL. Il protocollo è stato creato nel 2013 da Google come alternativa alla combinazione TCP+TLS per il Web, risolvendo problemi di elevato tempo di stabilizzazione e negoziazione delle connessioni in TCP e riducendo i ritardi in caso di perdita di pacchetti durante la trasmissione dei dati.
  • È stata aggiunta una direttiva separata «http2» per attivare selettivamente il protocollo HTTP/2 nell'assegnazione ai server (può essere utilizzata in singoli blocchi «server»). Il parametro «http2» nella direttiva «listen» è stato dichiarato obsoleto.
  • Rafforzata la protezione contro attività anomale dei client HTTP/2, in particolare contro gli attacchi DoS di tipo «Rapid Reset», in cui vengono creati un gran numero di flussi ripristinati contemporaneamente all'interno di una stessa connessione HTTP/2. Nella configurazione predefinita, tali attacchi sono limitati dal numero massimo di richieste nella connessione «keepalive_requests» (dopo ogni 1000 richieste, la connessione verrà ripristinata) e dalle limitazioni di «limit_req». Per una risposta più rapida contro l'invio di richieste tramite un gran numero di flussi, è stata aggiunta una restrizione aggiuntiva che impedisce di creare più di 256 (2 * max_concurrent_streams) nuovi flussi per ogni ciclo di elaborazione eventi. Questa nuova limitazione consente di iniziare a bloccare le richieste prima di raggiungere il limite totale sui flussi simultanei, ad esempio quando i flussi vengono elaborati in modo asincrono o ripristinati.
  • È stato aggiunto il supporto al modulo stream server virtuali, la cui configurazione è definita nel blocco «server { … }» mediante la direttiva server_name. server { server_name ~^(www\.)?(.+)$; proxy_pass www.$2:12345; }
  • È stato aggiunto un nuovo modulo ngx_stream_pass_module, progettato per inoltrare le connessioni ricevute direttamente a qualsiasi socket in ascolto associato a moduli come http, stream e mail. stream { server { listen 12345 ssl; ssl_certificate domain.crt; ssl_certificate_key domain.key; pass 127.0.0.1:8000; } }
  • Nella direttiva listen del modulo stream è stato implementato il supporto per i parametri «deferred» (che abilita l'accept ritardato), «accept_filter» (filtro delle connessioni in entrata, applicato prima della chiamata alla funzione accept) e «setfib» (assegnazione della tabella di routing).
  • Per alcune architetture è stato implementato il supporto per la definizione della dimensione del blocco (cache line) utilizzato per il trasferimento dei dati tra la cache della CPU e la memoria.
  • Migliorato il controllo dei buffer utilizzati per l'autodeterminazione delle connessioni HTTP/2.
  • Aumentata la performance di avvio delle configurazioni con un numero elevato di direttive 'location'.
  • È stato rimosso il supporto per la tecnologia Server push in HTTP/2.
  • Interrotta la supporto della direttiva «ssl», precedentemente dichiarata obsoleta.

Il rilascio stabile del progetto FreeNginx 1.26.0, un fork di Nginx, è stato pubblicato due settimane fa. Lo sviluppo del fork è guidato da Maksim Dunin, uno dei principali sviluppatori di Nginx. FreeNginx è posizionato come un progetto non commerciale, che garantisce lo sviluppo della base di codice di Nginx senza interventi aziendali.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster