Apache中配置HTTP/2必须依托HTTPS,不能在80端口启用;需确保Apache≥2.4.17、mod_http2和mod_ssl已加载、OpenSSL≥1.0.2支持ALPN,并在每个*:443虚拟主机内配置SSLEngine on及Protocols h2 http/1.1。

Apache 中配置 HTTP/2 必须依托 HTTPS,不能单独在 HTTP(80端口)上启用;虚拟主机需为每个 HTTPS 站点单独开启 h2 协议支持。核心是:先配好 TLS,再在对应 <VirtualHost *:443> 块里声明 Protocols,且确保模块、版本、ALPN 全部就位。
确认基础环境满足 HTTP/2 要求
HTTP/2 在 Apache 中不是“开关式”功能,依赖多个硬性条件:
- Apache 版本 ≥ 2.4.17(运行
httpd -v或apache2 -v查看) - 已加载
http2_module(执行httpd -M | grep http2,应显示http2_module (shared)) - 启用
ssl_module和socache_shmcb_module(Debian/Ubuntu 用a2enmod ssl socache_shmcb;RHEL/CentOS 检查LoadModule行是否启用) - OpenSSL ≥ 1.0.2(推荐 1.1.1+),确保支持 ALPN(应用层协议协商)——这是浏览器决定是否升级到 h2 的关键
为虚拟主机配置 HTTPS 基础项
HTTP/2 不会在纯 HTTP 下协商,所以每个要启用 h2 的站点,必须有独立的 HTTPS 虚拟主机。示例配置片段(放在 /etc/apache2/sites-available/your-site.conf 或 /etc/httpd/conf.d/vhost.conf 中):
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com
<pre class='brush:php;toolbar:false;'># SSL 证书路径(按实际调整)
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
# 强制 TLS 1.2+,禁用老旧协议
SSLEngine on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLHonorCipherOrder on
# 启用会话缓存(提升 TLS 性能)
SSLSessionCache shmcb:/var/run/apache2/ssl_scache(512000)
SSLSessionCacheTimeout 300</VirtualHost>
注意:SSLEngine on 必须存在,且证书路径必须可读;若使用 Let’s Encrypt,certbot 通常会自动写入这些路径。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
在 HTTPS 虚拟主机中启用 HTTP/2
只需在上述 <VirtualHost *:443> 块内添加一行即可激活协议协商:
Protocols h2 http/1.1
这行表示:优先尝试 HTTP/2(h2),失败则回退到 HTTP/1.1;不写 http/1.1 可能导致旧客户端(如某些爬虫或测试工具)无法访问。
如果你托管多个 HTTPS 站点,每个 <VirtualHost *:443> 都要加这一行——不能只在全局配置里写一次就生效,因为协议协商发生在每个 TLS 连接层面。
验证是否真正生效
仅看响应头(如 Upgrade: h2)不可靠,需检查 ALPN 协商结果:
-
浏览器 DevTools:打开 Network 标签页 → 刷新页面 → 查看任意请求的 “Protocol” 列,显示
h2即成功 -
命令行验证:
curl -I --http2 https://example.com,返回正常 HTTP 头且无报错(如curl: (1) Received HTTP/0.9 when not allowed),说明协商成功 -
避免常见误判:如果 curl 报
ALPN, offering h2但最终用的是 http/1.1,大概率是证书链不全、TLS 版本太低或服务器未正确发送 ALPN 扩展

















