开启HTTP/2需满足:Nginx版本≥1.9.5(推荐≥1.20)、编译时启用--with-http_v2_module、已部署有效SSL证书、监听443端口时在listen指令后添加http2参数。

宝塔面板里 Nginx 开启 HTTP/2 需要哪些前提条件
HTTP/2 不能单独开启,它强制依赖 HTTPS。如果你的站点还没配 SSL 证书,http2 参数加了也无效,Nginx 启动会报错或直接忽略。
常见错误现象:nginx: [warn] the "http2" parameter requires SSL support —— 这说明你没编译或没启用 OpenSSL 支持,或者当前 Nginx 版本太低(需 ≥1.9.5)。
- 确认宝塔用的是「编译安装」的 Nginx(非极速安装),且版本 ≥1.18(推荐 ≥1.20)
- 在宝塔「软件商店」→「Nginx」→「设置」→「编译参数」里检查是否含
--with-http_v2_module - 站点必须已成功部署有效 SSL 证书(Let’s Encrypt 或其他),且监听端口是
443 ssl http2
如何在宝塔中正确配置 Nginx 的 http2 参数
不是点开「SSL」开关就自动启用 HTTP/2;关键在 Nginx 配置文件里那行 listen 指令。宝塔默认可能只写 listen 443 ssl,漏掉 http2 就不生效。
实操建议:
- 进入「网站」→「对应站点」→「配置文件」,找到类似这行:
listen 443 ssl; - 改成:
listen 443 ssl http2;(注意空格分隔,不是逗号) - 如果还支持 IPv6,补上:
listen [::]:443 ssl http2; - 保存后务必点「重载配置」,不要只点「重启」——重载更快且不中断连接
示例片段:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
ssl_certificate /www/wwwroot/example.com/fullchain.pem;
ssl_certificate_key /www/wwwroot/example.com/privkey.pem;
...
}
HTTP/2 开启后为什么 Chrome DevTools 仍显示 h1?
这是最常被误解的一点:Chrome 的 Network 面板里 Protocol 列显示 h2 才代表生效;显示 h1 或空,说明没走 HTTP/2。但原因不一定是配置错了。
- 检查是否用了代理、CDN(如 Cloudflare)——它们可能终止 HTTP/2,回源走 HTTP/1.1
- 确认浏览器访问的是带
https://的地址,且没有混合内容(HTTP 资源)导致降级 - 某些旧安卓 WebView 或 IE11 不支持 HTTP/2,但现代 Chrome/Firefox/Edge 没问题
- 用命令行验证:
curl -I --http2 https://yourdomain.com,返回头里有HTTP/2 200才算真生效
开启 HTTP/2 后要注意的兼容性与性能细节
HTTP/2 本身不提升单个资源下载速度,它优化的是多请求并发效率。但配置不当反而引发新问题。
- 别在 HTTP/2 下再开
gzip压缩 JS/CSS——虽然不冲突,但现代浏览器对二进制传输更友好,可考虑试用brotli(需手动编译 Nginx) - 避免大量小文件拼接请求:HTTP/2 的多路复用让「一个域名 + 多个请求」比「多个子域名 + 多个连接」更优,所以不用再搞 domain sharding
- 宝塔自带防火墙或 WAF 插件若版本老旧,可能拦截 HTTP/2 的帧格式,导致部分接口 502;临时关闭测试可快速定位
真正卡住的往往不是“怎么开”,而是证书链是否完整、Nginx 是否真加载了 v2 模块、以及中间链路有没有静默降级。这些地方一环没对,就永远看不到 h2。










