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
文章作者: 若海; 原文链接: https://www.rehiy.com/post/599/; 转载需声明来自若海观澜

添加新评论