一、HTTP/3 簡介
- 基于 QUIC:在 UDP 之上實現的多路復用傳輸,內置擁塞控制與前向糾錯,無需三次握手即可恢復連接。
- 零 RTT 重連:借助 TLS 1.3,實現連接恢復時的 0-RTT 數據發送(視底層庫支持)。
- 多路復用無隊頭阻塞:每個流獨立擁塞控制,單流丟包不影響其他流。
- 內置安全:QUIC 自帶加密,TLS 與傳輸層緊密集成。
注意:當前模塊為實驗性功能(>=1.25.0),需自行評估風險。
二、環境與依賴
- NGINX ≥ 1.25.0,編譯時加上
--with-http_v3_module
。 - QUIC 庫:推薦 BoringSSL、LibreSSL 或 QuicTLS;若用 OpenSSL,則走兼容層,不支持早期數據(0-RTT)。
- 內核要求:Linux 5.7+(使用 eBPF 路由或 GSO 優化時)。
三、示例配置
http {log_format quic '$remote_addr - $remote_user [$time_local] ''"$request" $status $body_bytes_sent ''"$http_referer" "$http_user_agent" "$http3"';access_log /var/log/nginx/quic_access.log quic;server {# 同端口同時監聽 HTTP/3(UDP)和 HTTPS(TCP)listen 8443 quic reuseport;listen 8443 ssl;ssl_certificate /etc/ssl/example.crt;ssl_certificate_key /etc/ssl/example.key;ssl_protocols TLSv1.3;# 通知客戶端支持 HTTP/3add_header Alt-Svc 'h3=":8443"; ma=86400';location / {root /var/www/html;index index.html;}}
}
listen ... quic
:開啟 QUIC(UDP)監聽add_header Alt-Svc
:通過 Alt-Svc 通告瀏覽器可走 HTTP/3
四、核心指令詳解
指令 | 默認值 | 作用 | |
---|---|---|---|
`http3 on | off` | on | 全局/Server 級啟用或關閉 HTTP/3 協商 |
`http3_hq on | off` | off | 啟用 HTTP/0.9 over QUIC,用于兼容性測試 |
http3_max_concurrent_streams | 128 |