http/3 在 nginx 中是否启用,需通过浏览器(chrome://net-internals/#quic 和 network 的 protocol 字段)、curl --http3 命令、ss 查 udp 443 监听及防火墙、云安全组检查,并验证 alt-svc 响应头与 tcp 回退机制是否正常。

要确认 HTTP/3 在 Nginx 中真正跑起来了,不能只看配置有没有写对,得从客户端真实连接行为出发验证。重点不是“配了没”,而是“连上了没、走的是不是 QUIC”。
浏览器内直接查连接状态
Chrome 和 Edge 是目前对 HTTP/3 支持最稳定、调试最友好的浏览器。打开 chrome://net-internals/#quic,在搜索框输入你的域名(比如 example.com),如果看到对应条目状态为 Active,说明当前有活跃的 QUIC 连接正在工作。
再打开开发者工具 → Network 标签页 → 刷新页面 → 点开任意一个 HTTPS 请求 → 查看 Headers → 找到 Protocol 字段,显示 h3 就代表该请求确实走了 HTTP/3;同时检查响应头中是否有 Alt-Svc,内容类似:
alt-svc: h3=":443"; ma=86400这个头是告诉浏览器“我支持 HTTP/3,端口 443,有效期一天”,缺了它,浏览器不会主动升级。
命令行工具验证(需适配版本)
系统自带的 curl 通常不支持 HTTP/3,必须使用编译时启用了 quiche 或 nghttp3 的版本。验证命令很简单:
curl -I --http3 https://yourdomain.com- 成功返回 HTTP 状态码(如 200)且没有报错,基本说明服务端已响应 HTTP/3 请求
- 加
-v参数可看到详细握手过程,留意是否出现 ALPN: h3 或 QUIC 相关字样
检查服务端监听与防火墙
HTTP/3 基于 UDP,Nginx 必须监听 UDP 443 端口,且系统防火墙必须放行。验证方式包括:
- 运行
ss -ulpn | grep ':443',应看到类似udp 0 0 *:443 *:* users:(("nginx",pid=xxx,fd=xx))的输出 - 用
sudo ufw status(Ubuntu)或firewall-cmd --list-ports(CentOS)确认 UDP 443 已开放 - 若用云服务器,还要检查安全组规则是否允许 UDP 443 入向流量
回退机制是否正常
HTTP/3 不是强制替代,而是“协商升级”。浏览器会先走 HTTPS(TCP + TLS),收到 Alt-Svc 头后才尝试发起 QUIC 连接。如果 HTTP/3 不可用,必须能自动回落到 HTTP/2 或 HTTP/1.1,否则用户会白屏或超时。
测试方法:
- 临时关闭 UDP 443 防火墙或注释掉 Nginx 的
listen 443 quic reuseport;行 - 刷新页面,确认网站仍可正常访问(协议显示 h2 或 http/1.1)
- 再恢复配置,对比前后 Protocol 字段变化











