Apache中HTTP/2必须通过HTTPS启用,多路复用自动生效;需满足Apache≥2.4.17、OpenSSL≥1.0.2、启用mod_ssl与mod_http2、使用event MPM,并在443虚拟主机内配置Protocols h2 http/1.1。

Apache 中 HTTP/2 必须通过 HTTPS 启用,多路复用是它自动生效的底层能力,不需要额外开启或配置——只要满足前提条件,它就在工作。
必须使用 HTTPS(SSL/TLS)
HTTP/2 在 Apache 中仅支持加密连接。非加密的 http:// 请求会被浏览器强制降级为 HTTP/1.1,根本不会触发多路复用。
- 确保已启用
mod_ssl模块(CentOS/RHEL 系统通常需yum install mod_ssl) - 监听 443 端口时必须包含
Protocols h2 http/1.1,且 SSL 配置完整(证书、私钥、协议版本等) - 不要尝试在 80 端口配
h2—— Apache 会忽略,浏览器也不支持明文 HTTP/2
确认配置语法正确
典型 HTTPS + HTTP/2 的 Apache 虚拟主机配置片段如下:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<VirtualHost *:443>
ServerName example.com
SSLEngine on
SSLCertificateFile /path/to/fullchain.pem
SSLCertificateKeyFile /path/to/privkey.pem
Protocols h2 http/1.1 # 关键:明确声明支持 h2
# 其他常规配置...
</VirtualHost>-
Protocols指令必须出现在启用 SSL 的虚拟主机内,不能只写在全局或 80 端口配置里 - 推荐同时保留
http/1.1,保证旧客户端兼容性 - 避免混用
h2c(明文 HTTP/2),现代浏览器不支持,Apache 也默认禁用
验证是否真正启用了多路复用
别依赖瀑布图“看起来顺不顺”,看两个硬指标:
- 打开 Chrome DevTools → Network 标签页 → 右键表头 → 勾选 Protocol 列,所有资源请求显示为 h2(不是
http/1.1或空白) - 发起至少两个同域名资源请求(如
style.css和logo.png),在 Headers → Response 中检查是否有相同x-http2-connection-id或类似字段(取决于后端实现),一致说明复用同一连接
常见失效原因
多路复用没出现,大概率不是 Apache 配错了,而是链路某处断开了:
- 前端用
http://加载资源 → 浏览器走 HTTP/1.1,完全绕过 HTTP/2 - CDN 或反向代理(如 Nginx)未开启 HTTP/2,或终止了 TLS 后没透传协议信息
- SSL 配置不安全(如仅支持 TLS 1.0)→ 浏览器拒绝协商 HTTP/2(要求 TLS 1.2+)
- 证书域名不匹配、过期、或由不受信 CA 签发 → 浏览器中止连接,无法进入协议协商阶段

















