必须启用HTTPS并加载mod_http2模块,且在443端口VirtualHost中配置Protocols h2 http/1.1,同时确保TLS 1.2+、ALPN及有效证书等前提条件全部满足。

Linux 中配置 Apache 启用 HTTP/2 并不复杂,但必须满足几个关键前提:启用 HTTPS、使用较新版本的 Apache(2.4.17+)、加载 mod_http2 模块,并正确配置 TLS 协议和密码套件。HTTP/2 在 Apache 中默认是“协商启用”(ALPN),不支持纯明文 h2c,所以 HTTPS 是硬性要求。
确认环境与模块支持
先验证基础条件是否满足:
- 运行
httpd -v或apache2 -v,确认版本 ≥ 2.4.17(推荐 2.4.53+ 或 2.4.58+) - 检查
mod_http2是否已编译或可加载:httpd -M | grep http2(CentOS/RHEL)或a2enmod http2 && apache2ctl -M | grep http2(Debian/Ubuntu) - 确保 OpenSSL ≥ 1.0.2(最好 1.1.1+),支持 ALPN 扩展(HTTP/2 协商必需)
启用并加载 http2_module
在 Apache 配置中显式启用模块:
- CentOS/RHEL(Apache from httpd package):编辑
/etc/httpd/conf.modules.d/00-base.conf,取消注释或添加:LoadModule http2_module modules/mod_http2.so - Debian/Ubuntu:直接运行
a2enmod http2,系统会自动处理加载
配置虚拟主机支持 h2 协议
HTTP/2 必须通过 HTTPS 启用,因此需在启用 SSL 的 <VirtualHost *:443> 块中声明协议:
- 在
<VirtualHost *:443>内添加:<IfModule http2_module><br> Protocols h2 http/1.1<br> ProtocolsHonorOrder on<br></IfModule>
-
ProtocolsHonorOrder on表示客户端优先使用 h2;若协商失败则回退到 http/1.1 - 确保该虚拟主机已正确配置 SSL:
SSLEngine on、有效的证书路径(SSLCertificateFile和SSLCertificateKeyFile)
加固 TLS 配置以兼容 HTTP/2
HTTP/2 要求禁用老旧不安全协议,否则浏览器可能拒绝协商 h2:
- 在 SSL 配置段中(如
/etc/httpd/conf.d/ssl.conf或虚拟主机内)设置:SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
(推荐仅保留TLSv1.2 TLSv1.3) - 指定强密码套件,例如:
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384 - 启用 TLS 1.3(Apache 2.4.37+ 支持)能进一步提升性能和安全性
验证是否生效
重启服务后,用浏览器开发者工具或命令行验证:
- 重启 Apache:
systemctl restart httpd(RHEL)或systemctl restart apache2(Debian) - 访问
https://your-domain.com,打开 Chrome/Firefox DevTools → Network 标签 → 刷新页面 → 查看任意请求的 “Protocol” 列,显示h2即成功 - 终端验证:
curl -I --http2 https://your-domain.com,返回头中含HTTP/2 200且无错误即正常
不复杂但容易忽略:HTTP/2 不是开个开关就跑起来的协议,它依赖整个 TLS 栈的现代性。只要证书有效、模块加载、协议声明清晰、TLS 配置合规,就能稳定启用,带来多路复用和头部压缩带来的真实加速效果。


















