apache启用http/2的前提是已启用https,因主流浏览器仅在tls加密连接下协商http/2;需版本≥2.4.17、加载mod_http2模块、配置ssl/tls(含alpn)、虚拟主机监听443端口并设置protocols h2 http/1.1,最后重启服务验证。

Apache 支持 HTTP/2 的前提是已启用 HTTPS,因为主流浏览器(Chrome、Firefox、Safari 等)仅在 TLS 加密连接下协商 HTTP/2。单纯开启 h2 模块但未正确配置 SSL/TLS,客户端不会升级协议。
确认 Apache 版本与模块支持
HTTP/2 自 Apache 2.4.17 起正式支持,需确保版本 ≥ 2.4.17:
- 运行
httpd -v或apache2 -v查看版本 - 检查
http2_module是否已加载:httpd -M | grep http2(或apache2ctl -M | grep http2) - 若未出现
http2_module (shared),需重新编译 Apache 并添加--enable-http2参数,同时指定--with-nghttp2路径(如系统已安装 libnghttp2)
启用并验证 SSL/TLS 基础配置
HTTP/2 依赖 TLS 1.2+ 且需启用 ALPN(应用层协议协商),OpenSSL 版本应 ≥ 1.0.2(推荐 1.1.1+):
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确认已启用
ssl_module和socache_shmcb_module(用于会话缓存):a2enmod ssl socache_shmcb(Debian/Ubuntu)或检查LoadModule行是否启用 - 确保虚拟主机监听 443 端口,并包含有效证书路径:
SSLCertificateFile /etc/apache2/ssl/domain.crtSSLCertificateKeyFile /etc/apache2/ssl/domain.keySSLCertificateChainFile /etc/apache2/ssl/chain.crt(如需) - 在该
<virtualhost></virtualhost>块内必须启用:SSLEngine onSSLProtocol all -SSLv3 -TLSv1 -TLSv1.1(强制 TLS 1.2+)SSLHonorCipherOrder on
开启 HTTP/2 协议并优化协商
在已启用 HTTPS 的虚拟主机中添加协议声明即可激活 HTTP/2:
- 直接在
<virtualhost></virtualhost>内添加:Protocols h2 http/1.1 - 该配置表示:优先尝试 HTTP/2(
h2),降级到 HTTP/1.1;不写http/1.1可能导致旧客户端失败 - 如需全局生效(不推荐初用者),可在主配置中添加:
Protocols h2 http/1.1(位于<ifmodule http2_module></ifmodule>外也有效) - 重启服务:
systemctl restart apache2(Debian/Ubuntu)或systemctl restart httpd(RHEL/CentOS)
验证 HTTP/2 是否生效
不能仅凭响应头判断,需结合浏览器开发者工具或命令行确认 ALPN 协商结果:
- Chrome/Firefox:打开 DevTools → Network → 刷新页面 → 查看任意请求的 “Protocol” 列,显示
h2即成功 - 终端验证:
curl -I --http2 https://yourdomain.com,若返回正常响应头且无报错,说明协商成功 - 更底层验证:
openssl s_client -alpn h2 -connect yourdomain.com:443,输出中含ALPN protocol: h2表示 TLS 层已支持 - 注意:若使用自签名证书或本地 hosts 测试,需加
-k参数绕过证书校验,但 ALPN 协商仍可检测










