apache中开启http/2必须基于https,因其强制要求tls加密以防范中间人攻击;需apache 2.4.17+、启用mod_http2模块及libnghttp2依赖,并在443端口https虚拟主机中配置protocols h2 http/1.1。
apache 中开启 http/2 必须基于 https,因为官方明确要求 http/2 在公共互联网上仅通过 tls(即 https://)启用。http/1.1 仍用于明文 http://,这是为强制加密、防范中间人攻击而设定的硬性规则。
确认 Apache 版本与模块支持
HTTP/2 自 Apache 2.4.17 起原生支持,但需满足两个前提:
- 已安装并启用 mod_http2 模块(不是 mod_ssl 的替代,而是独立模块)
- 底层依赖库 libnghttp2 已就位(多数现代发行版包管理器会自动处理)
检查方式:
apachectl -t -D DUMP_MODULES | grep http2
若无输出,需启用模块:
- Ubuntu/Debian:
a2enmod http2 - CentOS/RHEL:
echo "LoadModule http2_module modules/mod_http2.so" >> /etc/httpd/conf.modules.d/00-base.conf,再重启
HTTPS 基础必须先跑通
HTTP/2 不是独立协议开关,它依附于已配置好的 HTTPS 站点。确保你已有:
- 有效的 SSL/TLS 证书(可自签用于测试,但生产环境建议 Let’s Encrypt)
- 启用 mod_ssl 模块(
a2enmod ssl或手动加载) - 一个监听 443 端口的
<virtualhost></virtualhost>配置块,含SSLEngine on及证书路径
示例关键片段:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
<virtualhost><br> ServerName example.com<br> SSLEngine on<br> SSLCertificateFile /path/to/fullchain.pem<br> SSLCertificateKeyFile /path/to/privkey.pem<br> # 后续添加 HTTP/2 支持<br></virtualhost>
在 HTTPS 虚拟主机中启用 HTTP/2
只需在对应 <virtualhost></virtualhost> 块内加入一行:
Protocols h2 http/1.1
说明:
-
h2表示 HTTP/2(ALPN 协商时使用) -
http/1.1是降级兜底,确保不支持 HTTP/2 的旧客户端仍能访问 - 顺序重要:把
h2放前面,浏览器优先协商 HTTP/2
无需修改端口或额外监听指令,也不需要重启服务——reload 即可生效:
sudo systemctl reload apache2
验证是否生效
部署后可通过以下方式确认:
- 浏览器开发者工具 → Network 标签页 → 刷新页面 → 查看任意请求的 Protocol 列,显示
h2即成功 - 命令行检测:
curl -I --http2 https://example.com,响应头中出现HTTP/2 200 - 在线工具如 KeyCDN HTTP/2 Test 输入域名一键检测
注意:若仍显示 http/1.1,请检查是否漏掉 Protocols 指令、SSL 是否真正启用、或客户端(如旧版 curl)不支持 ALPN。










