突然发现http3普及率比较高了,而且技术比前两年也越来越成熟了,就想着给自己的网站也开了http3加加速。
其实2025年的时候开过一次,但是那次发现开了http3网站加载速度反而慢了很多,原本几十毫秒就能加载的资源,http3需要一百多毫秒,翻倍了,所以当时短暂的开启之后就给下掉了。可能是当时编译的NGINX有Bug,也可能是其他原因,反正过去了就不深究了。
废话不多说,直接进入正题。
HTTP/3 底层是 UDP 443,TCP443照常保留,浏览器会优先尝试H3,失败自动回退HTTP/2。
前置条件
- Nginx ≥1.25.5,编译必须带
--with-http_v3_module
# 检查是否支持http3
nginx -V 2>&1 | grep http_v3_module
输出包含 http_v3_module 才可以;如果没有,宝塔软件商店 → Nginx → 编译安装新版(目前宝塔编译的最新版NGINX已经自带h3模块了)。
- 站点已配置SSL证书(HTTPS),HTTP不能开启H3。
- 放行 UDP 443端口
- 宝塔面板 → 安全 → 端口规则:新增,端口
443,协议选 UDP - 云服务商安全组(阿里云/腾讯云)入站规则同样放行 UDP 443
- 宝塔面板 → 安全 → 端口规则:新增,端口
最好ipv4、ipv6都开
站点NGINX配置文件
找到 listen 443 ssl http2;,在server块内添加下面完整片段,不要删掉原有listen 443 ssl http2,TCP链路要保留兼容旧客户端。
server
{
listen 80;
listen 443 ssl http2;
# ========= HTTP3 QUIC 新增 =========
listen 443 quic;
http3 on;
quic_retry on;
ssl_early_data on;
# 告诉浏览器本站支持HTTP3;always非常重要,否则3xx响应不带这个头
add_header Alt‑Svc 'h3=":443"; ma=86400' always;
# ===================================
ssl_protocols TLSv1.2 TLSv1.3;
# ... 下面保留宝塔自动生成原有配置,证书、root、server_name等不动
IPv6环境额外增加一行:
listen [::]:443 quic;
参数说明
listen 443 quic reuseport;:UDP QUIC监听,reuseport加不加都可以http3 on;:开启HTTP3quic_retry on;:QUIC地址验证,防源地址欺骗ssl_early_data on;:0‑RTT握手加速Alt‑Svc响应头:通知浏览器尝试UDP‑H3;必须加always,否则跳转页面丢失该头,宝塔面板默认的请求头是'quic=":443"; h3=":443"; h3-29=":443"; h3-27=":443";h3-25=":443"; h3-T050=":443"; h3-Q050=":443";h3-Q049=":443";h3-Q048=":443"; h3-Q046=":443"; h3-Q043=":443"';,这个应该是有问题的,加了之后部分浏览器识别不了。
保存重载
# 先校验语法
nginx -t
# 校验成功再重载
nginx -s reload
验证是否生效
- 在线工具:https://http3check.net、https://http3.wcode.net、https://geekflare.com/tools/http3-test/ 输入域名检测,显示
HTTP/3 is supported代表成功。(三个网站都检查一下比较靠谱) - Chrome F12 → Network,刷新,Protocol列显示
h3就是HTTP3;显示h2就是走HTTP2(浏览器会缓存Alt‑Svc,可能需要清缓存等待一段时间)



需要注意的点
- 浏览器第一次访问的时候是h2是正常的,正常情况下第二次之后的请求都会变成h3。
- 访问同样的网站,有时候是h3,有时候是h2也是正常的,浏览器会优先尝试h3,失败会退回h2,这个失败有可能是网络原因或者其他的原因导致的(反正我的基本都是网络原因,有知道根因的或者有其他原因导致的也可以评论区同步一下),所以不稳定我认为是正常的,不必担心。
开了之后的效果,emmm……大家自己体验一下吧,感觉比上次开的时候效果好。
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
文章评论