Nginx 启用 HTTP/3 配置教程(含排障)

一、环境准备
Nginx 版本要求
必须使用 Nginx 1.25.0 或更高版本(官方实验性支持 HTTP/3)。

nginx -v  # 验证版本

开放 80/443 端口
云服务器需要确保安全组和服务器内部防火墙均放行如下端口:

HTTP/1 基于 TCP 协议,需确保防火墙放行 TCP/80 流量。
HTTP/2 基于 TCP 协议,需确保防火墙放行 TCP/443 流量。
HTTP/3 基于 QUIC(Over UDP)协议,需确保防火墙放行 UDP/443 流量。

二、核心配置
在 Nginx 配置文件(如 /etc/nginx/nginx.conf 或站点配置文件)中修改 server 块:

server {
    listen 80;
    listen 443 ssl;
    listen 443 quic reuseport;  # 启用 QUIC 并优化 UDP 性能

    # IPv6 监听
    listen [::]:80;
    listen [::]:443 ssl;
    listen [::]:443 quic reuseport;

    # 强制启用 HTTP/2(兼容旧客户端)
    http2 on;

    # SSL 证书配置(必须使用 TLS 1.3)
    ssl_certificate     /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    ssl_protocols       TLSv1.3;  # HTTP/3 强制要求

    # 协议协商响应头(核心)
    add_header Alt-Svc 'h3=":443"; ma=2592000, h3-29=":443"; ma=2592000';

    # 其它配置块...
}

关键说明

reuseport 只需在一个 server 块中启用,避免多个 worker 竞争端口。

Alt-Svc 头用于告知客户端支持 HTTP/3,ma=2592000 表示缓存有效期(30 天)。

需同时监听 TCP(HTTP/2)和 UDP(QUIC)端口以实现协议兼容。

参考文档 https://nginx.org/en/docs/http/ngx_http_v3_module.html

三、验证 HTTP/3 是否生效
浏览器验证
打开 Chrome/Firefox 开发者工具 → Network 面板 → 查看请求的 Protocol 列:

成功启用时显示 h3(HTTP/3)。

若显示 h2,需检查 Alt-Svc 头或清除浏览器缓存。

命令行测试
使用支持 HTTP/3 的 curl 版本验证:

curl -I --http3 https://your-domain.com  # 响应头应包含 Alt-Svc

在线检测工具
访问 https://http3check.net 输入域名检测协议状态。
四、性能优化建议
在 server 块中添加如下配置,参阅 https://nginx.org/en/docs/http/ngx_http_v3_module.html

quic_retry on;               # 启用 QUIC 重传
quic_gso on;                 # UDP 分段卸载(Linux 内核 ≥5.19)
quic_stream_buffer_size 64k; # 流缓冲区大小

五、常见问题排查

问题现象
解决方案

浏览器未切换至 HTTP/3
检查 Alt-Svc 头是否生效

UDP 端口被防火墙阻断
使用 tcpdump 抓包验证

Nginx 启动报错
检查 listen quic 语法

TLS 版本不兼容
确认 ssl_protocols 为 TLSv1.3