Alt-Svc 响应头是浏览器启用 HTTP/3 的唯一触发机制,需在 server 或 location 块中手动配置 add_header 指令,端口须与 listen quic 严格一致并用英文引号包裹,格式错误将被忽略。

Alt-Svc 响应头是浏览器启用 HTTP/3 的唯一触发机制,Nginx 本身不自动发送它,必须手动配置;没这个头,Chrome、Edge、Firefox 就不会尝试 QUIC 连接,其他所有配置都无效。
Alt-Svc 必须加在 server 或 location 块中
它不是全局指令,不能写在 http 块里。只要客户端请求命中某个 server 或 location,该块里就得有 add_header 指令,否则对应路径(比如 /api/)的响应就没有 Alt-Svc,那些请求仍走 HTTP/2。
- 主站根路径:放在 server 块最外层即可覆盖首页和静态资源
- 子路径接口:若 /api/ 由独立 location 处理,必须在该 location 内再写一次 add_header
- 避免被覆盖:location 中若用了 add_header,会清空继承自 server 的同名头,所以需显式重复声明
格式和端口必须严格匹配监听配置
Alt-Svc 值中的端口必须和 listen quic 行完全一致,且必须用英文引号包裹。浏览器对格式极其敏感,错一个字符就会忽略整条头。
- 正确示例:add_header Alt-Svc 'h3=":443"; ma=86400';
- 错误写法:h3=":8443"(端口不一致)、h3=:443(缺引号)、h3=":443";ma=86400(中间少空格)
- 多版本兼容可加 h3-29:add_header Alt-Svc 'h3=":443"; ma=86400, h3-29=":443"; ma=86400';
验证 Alt-Svc 是否生效
不能只看 curl -I 输出,它默认不解析 Alt-Svc。要确认是否真正送达浏览器:
- Chrome 打开开发者工具 → Network → 点击任意 HTTPS 请求 → Headers 标签页 → 查找 Alt-Svc 字段
- 确保值格式正确、端口与 listen quic 一致、没有拼写或引号错误
- 配合 chrome://net-internals/#quic 页面,搜索域名,看到 “Active” 状态才代表 QUIC 已建立


















