http/2启用需同时满足nginx≥1.9.5且编译启用--with-http_v2_module,配置中listen 443 ssl后必须添加http2参数,并通过chrome开发者工具network标签页查看h2协议确认生效。

确认Nginx版本和http_v2_module是否就位
宝塔装了HTTPS ≠ 自动开HTTP/2。两个硬条件缺一不可:nginx -V 输出里必须有 --with-http_v2_module,且版本 ≥ 1.9.5。很多用户卡在“看着是1.22,但模块根本没编译进去”。
- 执行
nginx -V 2>&1 | grep http_v2,无输出就是没启用 - 宝塔7.4+默认Nginx多数已内置,但手动降级过(比如降到1.18)、或CentOS 7上一键部署的老环境(常见1.16),大概率不支持
- 升级最稳方式:用宝塔官方脚本
wget https://download.bt.cn/install/0/nginx5.sh && bash nginx5.sh install 1.25
修改站点配置文件,显式添加http2参数
光有模块不行,还得在具体站点的 server 块里“点名”启用。关键就在那行 listen 443 ssl; —— 它只表示走SSL,不指定HTTP版本。
- 路径:宝塔 → 网站 → 目标站点 → 设置 → 配置文件
- 找到
listen 443 ssl;(注意是带ssl的443监听,不是80端口) - 改成
listen 443 ssl http2;,空格不能少,分号不能丢 - 如果配置里有IPv6监听,如
listen [::]:443 ssl;,也得同步改成listen [::]:443 ssl http2; - 保存后宝塔通常自动重载;若页面没反应,手动点「重载Nginx」,别点「重启」——重载更快且不中断连接
验证是否真生效,避开常见假阳性
浏览器地址栏锁图标、甚至 curl -I https://yourdomain.com 返回200,都不能说明HTTP/2已启用。必须看协议协商结果。
- Chrome无痕模式 + 关掉所有插件/代理,访问网站 → F12 → Network → 刷新 → 任一请求的 Protocol 列显示
h2才算成功 - 命令行验证(服务端):
curl -I --http2 https://yourdomain.com,返回头第一行要是HTTP/2 200 - 经典陷阱:公司网络、某些国产杀毒软件或企业防火墙会强制降级成HTTP/1.1,导致本地验证失败。换手机热点再试一次更可靠
容易被忽略的兼容性与性能细节
加了 http2 参数只是起点,后续行为受多个隐含配置影响,尤其对后台系统或大Cookie场景。
- 没设
http2_max_field_size和http2_max_header_size:登录态多的后台可能触发431 Request Header Fields Too Large错误 - HTTP/2本身不加速单个资源下载,它靠复用连接和头部压缩提升并发效率。如果首屏仍慢,问题大概率在资源体积、CDN缓存或数据库响应上,不在协议层
- 想进一步提速?可以加
http2_push指令推送关键CSS/JS,但必须确保Nginx ≥ 1.13.9,且路径必须精确匹配URI(区分大小写、结尾斜杠)











