Apache通过SNI支持多域名HTTPS并启用HTTP/2,本质是SNI在TLS握手初期识别域名→选择对应证书和虚拟主机→协商HTTP/2;需满足Apache≥2.4.17、OpenSSL≥1.0.2、启用mod_http2和mod_ssl,并在全局配置Protocols h2 http/1.1。
apache 通过 sni 支持多域名 https,再叠加 http/2,本质上是三者协同:sni 负责在 tls 握手初期识别域名 → 选择对应证书和虚拟主机 → 启用 http/2 协议协商。关键在于 apache 版本、openssl 支持、模块启用和配置顺序都必须到位。
必须满足的基础条件
- Apache ≥ 2.4.17(官方完整支持 HTTP/2 的最低版本)
- OpenSSL ≥ 1.0.2(推荐 1.1.1 或更高,确保 ALPN 协议协商正常)
- 编译时启用
mod_http2(不是默认内置,需显式加载) -
mod_ssl已启用且工作正常(SNI 依赖它) - 所有虚拟主机监听同一 IP:443,不能混用无 SNI 的 SSL 配置(否则 fallback 行为会干扰 HTTP/2 升级)
正确启用 HTTP/2 全局支持
在主配置(如 httpd.conf 或 httpd-ssl.conf)顶部或 <IfModule http2_module> 块中加入:
Protocols h2 http/1.1
这表示:优先尝试 HTTP/2(h2),失败则降级到 HTTP/1.1。注意不要写成 h2c(明文 HTTP/2),它不适用于 HTTPS 场景。
每个 <VirtualHost *:443> 块内必须独立配置 SSL + HTTP/2
SNI 是按虚拟主机生效的,HTTP/2 协商也发生在每个 TLS 连接内,因此每个域名块都要保证:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
SSLEngine on -
SSLProtocol至少包含 TLSv1.2(HTTP/2 强制要求 TLS 1.2+) -
SSLCertificateFile和SSLCertificateKeyFile路径正确、权限合理(私钥不可被组/其他读取) - 不需要额外加
H2Direct on或类似指令——只要Protocols已设且 TLS 握手成功,浏览器自动协商 h2
示例(两个域名):
<VirtualHost *:443>
ServerName site-a.com
DocumentRoot "/var/www/a"
SSLEngine on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCertificateFile "/etc/ssl/a.crt"
SSLCertificateKeyFile "/etc/ssl/a.key"
SSLCertificateChainFile "/etc/ssl/a.chain"
<Directory "/var/www/a">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerName site-b.com
DocumentRoot "/var/www/b"
SSLEngine on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCertificateFile "/etc/ssl/b.crt"
SSLCertificateKeyFile "/etc/ssl/b.key"
SSLCertificateChainFile "/etc/ssl/b.chain"
<Directory "/var/www/b">
Require all granted
</Directory>
</VirtualHost>验证是否真正走 HTTP/2
用 Chrome 浏览器打开开发者工具 → Network 标签页 → 刷新页面 → 右键表头勾选 Protocol 列。若显示 h2,说明成功;若仍是 http/1.1,常见原因有:
- Apache 未加载
mod_http2(检查apachectl -M | grep http2) -
Protocols指令写在了<VirtualHost>内部(应放在全局或<IfModule>外层) - 客户端不支持(旧版 Safari、IE、Android 4.x WebView 等)
- TLS 握手失败导致回退(可
openssl s_client -connect site-a.com:443 -alpn h2查看 ALPN 输出)
不复杂但容易忽略

















