HTTP/2 Server Push需Nginx≥1.13.9、OpenSSL≥1.0.2e且启用HTTPS;宝塔中需手动在站点配置添加http2_push指令或Link头,并通过chrome://net-internals验证PUSH_PROMISE帧。

如果您已启用HTTP/2协议但网页资源仍需逐个请求加载,则可能是Nginx未正确配置HTTP/2 Server Push功能。以下是实现宝塔面板下站点支持HTTP/2 Push推送的可行方法:
一、确认基础环境满足HTTP/2 Push前提
HTTP/2 Push依赖于Nginx 1.13.9及以上版本、OpenSSL 1.0.2e及以上版本,且必须运行在HTTPS协议下。Push功能仅对TLS加密连接生效,明文HTTP/1.1或HTTP/2 over cleartext(h2c)均不支持Push。
1、登录宝塔面板,进入【软件商店】→【已安装】,查看Nginx版本是否≥1.13.9;若低于该版本,需升级至最新稳定版(如1.24.x或1.26.x)。
2、点击对应Nginx版本右侧【设置】→【SSL】,确认已启用“强制HTTPS”,并已成功部署有效SSL证书(非自签名证书)。
3、在终端中执行命令验证: nginx -V 2>&1 | grep -o 'HTTP/2',输出应为“HTTP/2”;再执行 openssl version,确认版本不低于1.0.2e。
二、修改站点Nginx配置启用http2_push指令
Nginx原生支持通过http2_push指令主动推送关键资源(如CSS、JS、字体文件),需手动编辑站点配置文件添加该指令。宝塔默认不启用此功能,且不提供可视化开关。
1、进入宝塔面板【网站】→ 找到目标站点 → 点击【设置】→【配置文件】。
2、在location / { ... }区块内,找到try_files或index语句附近位置。
3、插入以下推送指令(以推送主页必需的main.css和app.js为例):
http2_push /static/main.css;
http2_push /static/app.js;
http2_push /fonts/icon.woff2;
4、保存配置文件,点击【重载配置】按钮使变更生效。
三、使用add_header方式通过Link头触发Push(兼容性方案)
部分Nginx版本或编译参数可能禁用http2_push指令。此时可改用HTTP响应头Link声明预加载资源,由客户端自主触发Push,该方式不依赖Nginx内置Push模块,仅需标准HTTP/2支持。
1、仍在站点【配置文件】中,于server区块内添加:
add_header Link "/static/main.css; rel=preload; as=style", "/static/app.js; rel=preload; as=script";
2、确保该add_header位于location /或location = /内部,避免对非HTML响应重复添加。
3、保存并重载Nginx配置。
四、验证HTTP/2 Push是否生效
Push行为无法通过常规curl或浏览器开发者工具Network面板直接观测,需借助Chrome/Edge的专用调试接口或Wireshark抓包分析HTTP/2帧流。
1、在Chrome中访问站点,按F12打开开发者工具,切换至【Network】标签页,刷新页面。
2、右键表头区域,勾选【Protocol】列,确认主HTML响应协议显示为h2。
3、在地址栏输入:chrome://net-internals/#http2,查找对应域名的会话ID,展开后观察是否存在类型为PUSH_PROMISE的帧记录。
4、若存在且状态为OK,并携带目标资源路径,则表明Push已成功发起。










