apache 配置 http/2 必须协同 event mpm、keepalive(超时≤10秒)、brotli/gzip 压缩、静态资源强缓存及 tls 优化(ocsp 装订、证书链完整),单独启用反而可能降低小流量场景性能。

Apache 配置 HTTP/2 不是“打开就快”,必须配合底层 MPM、连接管理、压缩与缓存策略协同生效。单独启用 HTTP/2 而不调优,可能因队头阻塞缓解不足或 TLS 开销未摊薄,反而降低小流量场景性能。
确认前提条件
HTTP/2 在 Apache 中依赖以下基础:
- Apache ≥ 2.4.26(推荐 ≥ 2.4.53,修复早期 HTTP/2 多路复用稳定性问题)
- 启用 mod_ssl 和 mod_http2(Ubuntu/CentOS 均需手动启用:sudo a2enmod http2 ssl 或确保 httpd.conf 含
LoadModule http2_module modules/mod_http2.so) - 使用 TLS(HTTP/2 在主流浏览器中仅支持 HTTPS),且证书链完整、OCSP 装订已开启(提升握手速度并保护隐私)
- MPM 必须为 event(prefork 和 worker 不支持 HTTP/2 的流级调度)
核心 HTTP/2 配置项
在 <virtualhost></virtualhost> 块内添加:
Protocols h2 http/1.1 H2Direct off # 允许 HTTP/2 over TLS only,禁用明文 h2c(更安全) H2MaxSessionStreams 128 # 单连接最大并发流数,建议 64–256(高并发可设高,低内存服务器设低) H2WindowSize 262144 # 流窗口大小(字节),影响大文件传输吞吐,保持默认或略增即可 H2Push on # 启用服务端推送(谨慎使用!仅对确定会用的资源如关键 CSS/JS 推送) H2PushPriority text/css after # 控制推送优先级,避免阻塞 HTML 解析 H2EarlyHints on # 启用 103 Early Hints,让浏览器提前预加载关键资源
⚠️ 注意:H2Push 不要盲目全开。错误推送会浪费带宽、拖慢首屏。建议配合 <link> 响应头按需控制,或仅对静态资源路径做白名单推送。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
必须同步调优的配套项
HTTP/2 效能发挥严重依赖这些配置协同:
-
KeepAlive 必须开启且 Timeout ≤ 10 秒:HTTP/2 依赖长连接复用,
KeepAlive On+KeepAliveTimeout 5+MaxKeepAliveRequests 1000是合理组合(比 HTTP/1.1 更高) -
启用 Brotli 或 Gzip 压缩:HTTP/2 头部压缩虽强,但响应体仍需压缩。优先启用
mod_brotli(比 gzip 压缩率高 15–20%),fallback 到mod_deflate -
静态资源强缓存 + immutable:配合
mod_expires和mod_headers设置Cache-Control: public, max-age=31536000, immutable,减少重验证请求,释放 HTTP/2 多路复用价值 -
Event MPM 参数重调:HTTP/2 下单连接承载更多请求,应适当降低
MaxRequestWorkers(如从 256 降至 128),提高ThreadsPerChild(如设为 64),避免线程争抢;同时设置ServerLimit与MaxRequestWorkers一致
验证与监控
配置后务必验证是否真正生效:
- 浏览器开发者工具 → Network → 点击任意请求 → 查看 Protocol 列是否显示
h2 - 命令行检查:
curl -I --http2 https://yoursite.com,响应头应含HTTP/2 200 - 启用
mod_status并访问/server-status?auto,观察ReqPerSec提升及Scoreboard中.(空闲)和K(keepalive)状态比例是否健康
不复杂但容易忽略:HTTP/2 不是银弹,它放大了配置协同的价值——错配 MPM、关闭 KeepAlive 或没开压缩,会让 HTTP/2 反而比优化后的 HTTP/1.1 更慢。










