Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
apache配置http/2必须搭配https,在块内单独配置protocols h2 http/1.1,每个https虚拟主机需独立声明,依赖tls 1.2+、alpn及mod_http2模块启用。

Apache 中配置 HTTP/2 必须搭配 HTTPS,不能单独在 HTTP(80 端口)上启用;虚拟主机需在 <virtualhost></virtualhost> 块内声明协议,且每个 HTTPS 虚拟主机都要独立配置 HTTP/2 支持。
确保基础 HTTPS 虚拟主机已就绪
HTTP/2 依赖 TLS 加密和 ALPN 协商,所以先确认你的 <virtualhost></virtualhost> 已正确启用 SSL:
- 已加载
ssl_module和socache_shmcb_module -
SSLEngine on已开启,证书路径(SSLCertificateFile、SSLCertificateKeyFile)指向有效文件 - 强制使用 TLS 1.2+:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 - 推荐启用会话缓存:
SSLSessionCache shmcb:/var/run/apache2/ssl_scache(512000)
在 HTTPS 虚拟主机中启用 HTTP/2
只需在对应 <virtualhost></virtualhost> 块内添加一行即可激活协议协商:
<virtualhost>
ServerName example.com
DocumentRoot /var/www/example.com
<pre class="brush:php;toolbar:false;">SSLEngine on
SSLCertificateFile /etc/ssl/certs/example.com.crt
SSLCertificateKeyFile /etc/ssl/private/example.com.key
Protocols h2 http/1.1 # ← 关键:仅在此处生效,不写 http/1.1 可能导致旧客户端失败
注意:Protocols 指令必须放在 <virtualhost></virtualhost> 内,不能只写在全局配置里——多个 HTTPS 虚拟主机时,每个都需显式声明,否则仅第一个生效或被忽略。
多域名虚拟主机共用同一 IP 时的写法
若你托管多个 HTTPS 站点(如 site-a.com 和 site-b.com),每个都需独立的 <virtualhost></virtualhost> 块,并各自包含 Protocols h2 http/1.1:
- 证书可使用通配符证书或通过 SNI 分别加载不同证书
- 无需为每个站点重复加载模块,只要主服务启用了
http2_module即可 - 避免在
<virtualhost></virtualhost>中写Protocols——浏览器根本不会协商 h2
验证是否真正生效
仅看响应头(如 upgrade: h2)不可靠,应以实际协商结果为准:
- Chrome/Firefox DevTools → Network 标签 → 刷新页面 → 查看任意请求的 “Protocol” 列显示
h2 - 命令行测试:
curl -I --http2 https://example.com,成功返回头且无ALPN negotiation failed报错 - 检查 Apache 错误日志,确认无
mod_http2相关警告(如 nghttp2 版本过低)










