Apache启用HTTP/2需满足三项硬性条件:OpenSSL 1.0.2+且启用ALPN、加载mod_http2模块、仅在HTTPS虚拟主机中生效;配置Protocols h2 http/1.1并确保TLSv1.2+与有效证书,再通过curl或浏览器Network面板验证h2协议。

Apache 启用 HTTP/2 本身不直接提供高可用能力,但它可与高可用架构(如 Pacemaker + VIP、反向代理集群、负载均衡器)协同工作,提升终端用户体验和传输效率。关键在于:HTTP/2 是 TLS 层之上的协议特性,必须在安全上下文中启用;而高可用是服务部署层面的保障机制,二者分层协作,不可混为一谈,但需配置对齐。
以下分三部分说明实际落地要点:
HTTP/2 在 Apache 中的启用前提与配置
必须满足三项硬性条件,缺一不可:
- 使用 OpenSSL 1.0.2+(推荐 1.1.1 或更高),且编译时启用了 ALPN 支持
- 启用
mod_http2模块(Apache 2.4.17+ 内置,但默认未加载) - 仅在 HTTPS 虚拟主机中生效(HTTP/2 不支持明文 h2c,除非显式启用且客户端支持,生产环境不推荐)
启用步骤:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
# 启用模块(Debian/Ubuntu) sudo a2enmod http2 ssl # RHEL/CentOS:取消 /etc/httpd/conf.modules.d/00-http2.conf 中 LoadModule 行注释 # 在 <VirtualHost *:443> 块内添加: Protocols h2 http/1.1 H2Direct off # 禁用明文 h2c,只走 TLS 协商 SSLEngine on SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 # 至少 TLSv1.2 SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:... SSLHonorCipherOrder on
验证方式:浏览器开发者工具 → Network → Protocol 列显示 h2;或用 curl -I --http2 https://yourdomain.com 查看响应头是否含 HTTP/2 200。
HTTP/2 与 Pacemaker 高可用集群的配合要点
Pacemaker 管理的是 Apache 进程 + VIP 资源,它不感知 HTTP/2 协议层。但需注意:
- VIP 漂移后,新主节点上的 Apache 必须已加载
mod_http2且 SSL 证书路径一致,否则 HTTPS 会失败,HTTP/2 自然不可用 -
ocf:heartbeat:apache资源 agent 默认不校验模块加载状态,建议在监控脚本中补充检查:apache2ctl -M | grep http2 >/dev/null || exit 1 openssl x509 -in /etc/pki/tls/certs/your.crt -checkend 86400 >/dev/null || exit 1
-
statusurl="https://localhost/server-status"监控地址必须走 HTTPS(因 HTTP/2 只在 TLS 下启用),且/server-status的<Location>需允许localhost并启用ExtendedStatus On
HTTP/2 与反向代理网关型高可用的协同
若 Apache 作为统一反向代理网关(非直连用户),则 HTTP/2 通常只终结在前端(即客户端 ↔ Apache),后端(Apache ↔ 应用)仍用 HTTP/1.1 或 HTTP/2(取决于后端支持):
- 客户端到 Apache:启用
Protocols h2 http/1.1,享受多路复用、头部压缩 - Apache 到后端:
ProxyPass默认走 HTTP/1.1;如后端支持 HTTP/2,需显式开启:ProxySet alpn=h2,http/1.1 # Apache 2.4.53+ 支持
- 注意:
mod_proxy_http2模块需额外启用(非mod_http2),且后端必须提供有效 TLS 证书(ALPN 协商依赖证书信任链)
不复杂但容易忽略

















