必须升级Nginx至1.25+并启用http_v3_module,配置四行独立listen(含UDP reuseport),添加ssl_early_data on和正确格式Alt-Svc响应头,放行UDP 443端口,最终以浏览器DevTools中Protocol显示h3为准。

必须先升级到 Nginx 1.25+,否则 http2 和 quic 指令直接报错;QUIC 还要求编译时启用 --with-http_v3_module,宝塔默认安装的旧版(如 1.22)不满足条件。
确认并升级 Nginx 版本至 1.25+(含 v3 模块)
宝塔面板自带的 Nginx 升级脚本已适配 QUIC 支持,但需主动触发。执行前先检查当前版本和模块:
-
nginx -v看是否 ≥ 1.25;若否,运行wget https://download.bt.cn/install/0/nginx5.sh && bash nginx5.sh install 1.26 -
nginx -V 2>&1 | grep -o with-http_v3-module必须有输出,否则模块未启用 - 升级后务必在宝塔首页刷新,确认 Nginx 版本号已更新,且无“module not found”类错误
修改站点配置:同时声明 HTTP/2 和 QUIC 监听
仅写 listen 443 ssl http2; 只能启用 HTTP/2;HTTP/3 需要独立的 UDP 监听,且不能合并进同一行。IPv4/IPv6 均需覆盖:
- 在站点【配置文件】的
server块内,替换或补充以下四行(顺序无关,但需共存):listen 443 ssl; listen 443 quic reuseport; listen [::]:443 ssl; listen [::]:443 quic reuseport;
- 删掉旧的
http2 on;独立指令(Nginx 1.25+ 不再支持该写法),确保http2仅作为listen的修饰符出现 -
ssl_early_data on;必须添加,否则 QUIC 的 0-RTT 特性被禁用
注入 Alt-Svc 响应头并验证浏览器识别
Alt-Svc 是客户端发现 HTTP/3 的唯一机制,拼写、大小写、引号格式全错都会失效。它不参与 TLS 握手,纯靠响应头传递:
- 在
server块内添加:add_header Alt-Svc 'h3=":443"; ma=2592000, h3-29=":443"; ma=2592000, h3-Q050=":443"; ma=2592000';
- 不要用
alt-svc或Alt-Svc:(冒号后多空格会截断)、不要漏掉单引号包裹整个值 - 用 Chrome 访问站点,打开 DevTools → Network → 刷新 → 点击任意请求 → Headers → Response Headers,确认存在
Alt-Svc字段
放行 UDP 443 端口并检查云平台安全组
QUIC 流量走 UDP,防火墙只开 TCP 443 完全无效。客户端发起 QUIC 连接失败时,不会报错,而是静默降级到 HTTP/2 —— 这是最容易被忽略的环节:
- 宝塔【安全】页面中,点击【放行端口】,输入
443,协议选UDP,提交 - 阿里云/腾讯云等控制台,找到对应 ECS 实例的安全组规则,手动添加一条入方向规则:端口
443,协议UDP,源地址0.0.0.0/0(或按需限制) - 验证命令:
ss -ulpn | grep ':443'应看到udp类型监听;curl -I --http3 https://yourdomain.com(需 curl 8.0+)可直连测试
HTTP/3 的实际生效高度依赖客户端环境:Chrome 默认开启 QUIC,但需访问过一次才缓存 Alt-Svc;Safari 对 h3-Q050 兼容性较差;Firefox 需手动启用 network.http.http3.enabled。别只看 Nginx 配置“写了”,重点盯住浏览器 DevTools 的 Protocol 列是否真显示 h3。


















