Nginx 从 1.25.0 版本起支持 HTTP/3 终结(非代理),需编译启用 --with-http_v3_module 和 --with-stream_quic_module,内核 ≥5.4、放行 UDP 443、强制 TLSv1.3、配置 listen 443 quic reuseport 与 add_header Alt-Svc。

直接说结论:Nginx 从 1.25.0 版本起支持 HTTP/3,但仅限“终结”(terminating)QUIC 连接,不能反向代理 HTTP/3 上游;它把 QUIC 请求解包后,仍用 HTTP/1.1 或 HTTP/2 转发给后端。想用好 HTTP/3 提速,关键不是“全链路 HTTP/3”,而是让客户端快速、稳定地连上来。
确认环境是否达标
HTTP/3 不是开个开关就能跑的协议,硬性条件缺一不可:
- Nginx 必须是 1.25.0 或更高主线版本(mainline),且编译时启用了 --with-http_v3_module 和 --with-stream_quic_module
- 操作系统内核建议 ≥ 5.4,UDP 性能更稳;防火墙必须放行 UDP 443 端口(这是最常被忽略的一步)
- SSL 库推荐 BoringSSL 或 quictls,OpenSSL 3.2+ 可用但功能受限;TLS 必须强制为 TLSv1.3,禁用降级选项
- 证书需有效(Let’s Encrypt 即可),路径配置正确,TCP 和 UDP 共用同一套证书
核心配置写法要准确
以下是最小可行配置片段,重点在监听指令和响应头:
- 监听必须同时存在两行:listen 443 ssl http2;(兼容旧客户端)和 listen 443 quic reuseport;(启用 QUIC)
- 不要写
http3 on;—— Nginx 官方配置中没有这个指令,启用靠的是quic关键字 -
Alt-Svc 响应头必须加,例如:
add_header Alt-Svc 'h3=":443"; ma=86400';,浏览器靠它发现 HTTP/3 支持 - QUIC 参数可选调优:
quic_max_idle_timeout 30s;、quic_initial_max_data 16m;,但非必需
验证是否真正生效
别信 curl -I 默认输出,它不识别 HTTP/3:
- 用 Chrome 访问后,打开
chrome://net-internals/#quic,搜索你的域名,看到 “Active” 状态即表示连接已走 QUIC - 开发者工具 → Network → 点开任意请求 → Headers → 查看 alt-svc 响应头是否存在且格式正确
- 终端验证需用支持 QUIC 的 curl:
curl -I --http3 https://yourdomain.com(需提前编译含 quiche 的版本)
生产部署更推荐分层架构
把 HTTP/3 终结交给更成熟的网关,Nginx 专注做它擅长的事:
-
Caddy 2.7+:开箱支持 HTTP/3,自动申请证书,一行
reverse_proxy localhost:8080就能把流量转给本地 Nginx -
Envoy:通过
quic_transport_socket启用 H3 监听,后端 cluster 指向 Nginx,稳定性和可观测性更强 - 避免在生产环境使用 nginx-quic 实验分支——它不兼容多数第三方模块,升级维护成本高



















