Guide

Abilitare HTTP/3 su NGINX e Ubuntu 24.04: pacchetti, configurazione e verifica con curl

Come attivare QUIC/HTTP3 su NGINX con i pacchetti ufficiali nginx.org, le direttive nel blocco server, il firewall UDP e il test con curl --http3.

Redazione UptimeMag · 15 ottobre 2026 · 4 minuti di lettura

Abilitare HTTP/3 su NGINX e Ubuntu 24.04: pacchetti, configurazione e verifica con curl

Perché i pacchetti della distribuzione non bastano

Il supporto a QUIC e HTTP/3 in NGINX è disponibile dalla versione 1.25.0 ed è incluso nei pacchetti binari ufficiali pubblicati da nginx.org. Chi installa NGINX dai repository universe di Ubuntu rischia di trovarsi con una build più vecchia, priva del modulo ngx_http_v3_module: su un server già in produzione il controllo si fa con nginx -v, e se il numero è sotto 1.25.0 il modulo semplicemente non c'è. La via pulita, su Ubuntu 24.04 "noble", è passare al repository ufficiale di nginx.org, che compila già il modulo v3 nei pacchetti distribuiti: chi parte invece da una build da sorgente deve aggiungere esplicitamente il flag --with-http_v3_module in fase di configure, perché il modulo non viene incluso di default.

Passo 1: il repository ufficiale nginx.org

Ubuntu 24.04 "noble" è una delle versioni supportate ufficialmente dal repository nginx.org, sia su x86_64 sia su aarch64/arm64. I comandi, presi dalla guida ufficiale ai pacchetti Linux, sono:

sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring

curl https://nginx.org/keys/nginx_signing.key \
 | gpg --dearmor \
 | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" \
 | sudo tee /etc/apt/sources.list.d/nginx.list

sudo apt update
sudo apt install nginx

Chi preferisce la versione mainline (più recente, stesso ramo che riceve prima le novità su QUIC) sostituisce l'URL con https://nginx.org/packages/mainline/ubuntu.

Passo 2: verificare che il modulo ci sia davvero

Prima di toccare la configurazione, un controllo:

nginx -V 2>&1 | grep -o with-http_v3_module

Se il comando non restituisce nulla, il binario installato non supporta HTTP/3 e nessuna direttiva in nginx.conf lo farà funzionare: va cambiato il pacchetto, non la configurazione.

Passo 3: le direttive nel blocco server

Le direttive principali, documentate nel modulo ngx_http_v3_module, sono il parametro quic sul listen e, se si usano più worker, reuseport insieme ad esso. Per l'indirizzamento duale e la compatibilità con i client che non supportano ancora QUIC, nginx.org consiglia di usare la stessa porta sia per HTTP/3 sia per HTTPS:

server {
 listen 443 ssl;
 listen 443 quic reuseport;
 listen [::]:443 ssl;
 listen [::]:443 quic reuseport;

 http2 on;
 http3 on;

 server_name example.com;

 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
 ssl_protocols TLSv1.3;

 add_header Alt-Svc 'h3=":443"; ma=86400' always;

 quic_retry on;
 ssl_early_data on;

 root /var/www/example.com;
 index index.html;
}

QUIC richiede obbligatoriamente TLSv1.3, anche se la connessione TCP di fallback continua ad accettare TLSv1.2. La direttiva http3 ha valore di default on nel contesto http/server una volta che il modulo è compilato, ma scriverla esplicitamente rende la configurazione più leggibile. quic_retry on abilita la validazione dell'indirizzo contro gli attacchi di amplificazione; ssl_early_data on abilita lo 0-RTT, ma la libreria OpenSSL versione 3.5.1 o superiore è consigliata per costruire NGINX con pieno supporto QUIC: sotto quella soglia viene usato uno strato di compatibilità che non supporta lo 0-RTT.

Dopo la modifica, test e reload:

sudo nginx -t
sudo systemctl reload nginx

Passo 4: la porta UDP nel firewall

HTTP/3 viaggia su UDP, non su TCP: la regola che chi gestisce il server dimentica più spesso è proprio quella sulla porta UDP, perché la 443 TCP è già aperta per HTTPS da tempo. Con ufw:

sudo ufw allow 443/tcp
sudo ufw allow 443/udp
sudo ufw reload

Senza la regola UDP il browser prova HTTP/3, non riceve risposta e ripiega su HTTP/2 senza errori visibili: il sito continua a funzionare, ma non sta usando QUIC.

Passo 5: verificare con curl --http3

Qui si inciampa spesso: il curl installato da apt su Ubuntu 24.04 normalmente non supporta HTTP/3. Secondo la documentazione ufficiale di curl.se, il supporto richiede una build collegata a ngtcp2 e nghttp3 insieme a una libreria TLS compatibile con QUIC (OpenSSL 3.5.0 o superiore, oppure BoringSSL, LibreSSL, quictls o wolfSSL con patch QUIC). Il controllo si fa così:

curl -V | grep -i HTTP3

Se la riga delle feature non contiene HTTP3, il binario va sostituito con una build che lo includa prima di procedere. Una volta disponibile un curl adatto, la verifica sul server è:

curl --http3 -v https://example.com/

Nell'output, la riga iniziale della risposta deve indicare la versione del protocollo negoziata; con --http3-only la richiesta fallisce esplicitamente se QUIC non va a buon fine, utile per un test secco senza il fallback automatico a HTTP/2 o HTTP/1.1 che curl applica di default con --http3.

Un avviso di sicurezza da conoscere

Il modulo QUIC di NGINX resta sperimentale. La CVE-2024-24989, che riguarda proprio il modulo HTTP/3 QUIC e può causare la terminazione dei processi worker a fronte di richieste non divulgate pubblicamente, risulta "Not affected" per il pacchetto nginx di Ubuntu 24.04 LTS noble nel registro di sicurezza Ubuntu — un buon motivo per tenere comunque sotto controllo gli avvisi di sicurezza quando si abilita un modulo etichettato come sperimentale in produzione.

Tabella dei requisiti

Componente Versione minima richiesta Dove si verifica
NGINX 1.25.0, con pacchetto nginx.org (modulo v3 già compilato) o build propria con --with-http_v3_module nginx -V | grep http_v3_module
OpenSSL 1.1.1 o superiore per QUIC di base; 3.5.1 o superiore per lo 0-RTT (ssl_early_data) openssl version
TLS nel blocco server TLSv1.3 obbligatorio direttiva ssl_protocols
Ubuntu 24.04 "noble", piattaforma ufficialmente supportata dai pacchetti nginx.org lsb_release -cs
curl per il test build con ngtcp2 + nghttp3 e TLS compatibile QUIC curl -V | grep HTTP3
Firewall porta UDP 443 aperta, oltre alla TCP 443 sudo ufw status

Testo redatto con il supporto dell'intelligenza artificiale e verificato dalla redazione (AI Act, art. 50).