Apache从2.4.17起通过mod_http2支持HTTP/2,需启用模块(a2enmod http2)、配置HTTPS及ALPN,并在虚拟主机中添加Protocols h2 http/1.1;验证可用curl -I --http2或浏览器Network面板查看协议是否为h2。

启用 HTTP/2 并确认协议支持
Apache 从 2.4.17 起通过 mod_http2 支持 HTTP/2,但必须运行在 TLS(HTTPS)环境下。先确保已启用模块:
a2enmod http2- 确认 SSL 已启用且证书有效(HTTP/2 不支持明文 h2c 模式,除非显式配置并暴露非标准端口,生产环境不推荐)
- 在虚拟主机配置中添加
H2Direct on(仅调试用)或依赖 ALPN 协商(默认行为)
优化帧处理相关核心参数
HTTP/2 的帧转发效率取决于连接复用深度、流控制粒度和内存缓冲策略。关键配置项如下:
-
H2MaxSessionStreams 100:单个连接允许的最大并发流数。过高易引发客户端拥塞,建议 50–128;静态资源多的站点可设高些 -
H2StreamMaxMemSize 65536:每个流缓存帧数据的上限(字节),默认 64KB。大文件传输或长轮询场景可适度调高(如 131072),但需配合内存监控 -
H2WindowSize 65536:初始流级窗口大小(字节),影响单次可发帧量。增大可减少往返等待,但过大会加剧头部阻塞风险;保持默认或设为 131072 较稳妥 -
H2Push on与H2PushPriority:服务端推送虽不属“帧转发”本身,但推送流会占用帧通道。若未精细控制资源依赖关系,建议关闭:H2Push off
协同调优底层连接与 MPM 设置
HTTP/2 的事件驱动特性高度依赖底层 MPM 和内核网络栈。若使用 event MPM,需匹配以下设置:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确保
MaxRequestWorkers足够支撑预期并发连接数(注意:HTTP/2 下一个连接承载多个流,进程/线程数可低于 HTTP/1.1) - 降低
KeepAliveTimeout至 5–10 秒,避免空闲连接长期占用事件循环 - 内核层面开启
net.ipv4.tcp_tw_reuse = 1和增大net.core.somaxconn,缓解 TIME_WAIT 积压对新连接建链的影响
验证与持续观测
调整后需实测帧行为而非仅看协议是否启用:
- 用
curl -I --http2 -k https://yoursite/确认响应头含HTTP/2 200 - 浏览器开发者工具 → Network → 查看每条请求的 Protocol 列是否为
h2,并观察多路复用是否生效(同域名下多个请求共享 connection ID) - 启用 Apache 状态页(
mod_status)并关注Scoreboard中_(空闲)、S(SSL)、K(keepalive)状态分布,判断连接复用是否健康 - 结合
nghttp工具分析帧级行为:nghttp -v https://yoursite/可打印详细帧收发日志










