宝塔面板开启http/2需手动配置且仅对https站点生效:先验证nginx含http_v2_module及openssl≥1.1.1,再编辑域名配置文件将listen 443 ssl改为listen 443 ssl http2,重载nginx后用curl或浏览器验证。

宝塔面板开启 HTTP/2 必须手动改配置,面板界面不提供开关,且仅对 HTTPS 站点生效。
确认 Nginx 和 OpenSSL 是否支持 HTTP/2
宝塔默认安装的 Nginx 版本(≥1.15.0)和 OpenSSL(≥1.1.1)通常已满足要求,但需验证:
- 执行
nginx -V 2>&1 | grep http_v2,输出含with-http_v2_module才算编译进模块 - 执行
nginx -V 2>&1 | grep -i openssl,确认 OpenSSL 版本 ≥ 1.0.2(推荐 ≥ 1.1.1) - 若无输出或版本过低,需在宝塔「软件商店 → Nginx → 设置 → 编译安装」中勾选「HTTP/2 支持」并重装(耗时较长)
修改站点配置文件添加 http2 标识
宝塔不会自动为已有 HTTPS 站点补 http2,必须手动编辑配置:
- 路径为
/www/server/panel/vhost/nginx/你的域名.conf - 找到
listen 443 ssl这一行,改为listen 443 ssl http2(顺序无关,但ssl和http2必须同时存在) - IPv6 用户还需加一行:
listen [::]:443 ssl http2 - 确保该
server块内已配置ssl_certificate和ssl_certificate_key,否则http2不生效
验证是否真正启用 HTTP/2
改完后必须重载 Nginx,且不能只靠「宝塔面板重启」——它有时跳过语法检查:
- 先执行
nginx -t,确认输出success - 再执行
systemctl reload nginx或nginx -s reload - 用
curl -I --http2 https://你的域名,返回头中出现HTTP/2 200才算成功 - 浏览器开发者工具 Network 标签页,Protocol 列显示
h2,不是http/1.1
常见失效原因与绕过坑点
即使配置写了 http2,仍降级为 HTTP/1.1,多数是以下情况:
- 证书链不完整(如缺
fullchain.pem中的中间证书),导致 ALPN 协商失败 - 使用了被 HTTP/2 明确禁止的加密套件(如含
RC4、3DES、MD5),Nginx 会静默降级 - 宝塔「网站 → SSL → 强制 HTTPS」功能启用了,但主配置里没配
ssl_protocols TLSv1.2 TLSv1.3,旧协议干扰 ALPN - CDN 或 WAF(如腾讯云 CDN、Cloudflare)未透传 ALPN,实际协商发生在 CDN 和源站之间,用户看到的是 CDN 返回的协议
最易被忽略的是:宝塔自动生成的配置常把 ssl_ciphers 写死成兼容旧客户端的宽松列表,里面混有 HTTP/2 禁用套件。必须手动删掉不安全项,只保留 AEAD 类型(如 ECDHE-ECDSA-AES128-GCM-SHA256)。











