Apache源码编译启用HTTP/2需先安装nghttp2开发库,再配置--enable-http2和--with-nghttp2参数,启用SSL及event MPM,加载mod_http2.so模块,并在HTTPS虚拟主机中设置Protocols h2 http/1.1。

Apache 源码编译启用 HTTP/2 支持,核心在于正确链接 nghttp2 库并启用 mod_http2 模块。HTTP/2 在 Apache 中不是默认内置功能,必须在编译阶段显式开启,且依赖外部的 libnghttp2 实现 ALPN 协商和帧解析。
确认系统已安装 nghttp2 开发库
nghttp2 是 Apache HTTP/2 的底层依赖,必须先安装其开发包(含头文件与静态/动态库):
- Ubuntu/Debian:
sudo apt install libnghttp2-dev - RHEL/CentOS/Fedora:
sudo dnf install nghttp2-devel或sudo yum install nghttp2-devel - macOS(Homebrew):
brew install nghttp2
验证安装成功:nghttp --version 应输出版本号(建议 ≥ 1.41.0),pkg-config --modversion nghttp2 也应返回有效版本。
编译时指定 --enable-http2 和 --with-nghttp2
解压 Apache 源码后,在 configure 阶段必须显式启用 HTTP/2 并指向 nghttp2 路径:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 若系统 pkg-config 可识别 nghttp2,直接使用:
./configure --enable-http2 --enable-ssl --enable-so --with-mpm=event - 若 configure 找不到 nghttp2(常见于自定义安装路径),需手动指定:
./configure --enable-http2 --with-nghttp2=/usr/local --enable-ssl --enable-so --with-mpm=event
其中/usr/local替换为你的 nghttp2 安装前缀(如通过源码安装,通常为/usr/local;用包管理器安装则一般无需指定)
注意:必须启用 --enable-ssl(因 HTTP/2 要求 TLS),且推荐使用 event MPM(prefork 不兼容 HTTP/2)。
检查模块生成与加载配置
编译安装完成后:
- 确认
modules/mod_http2.so已生成(路径通常为APACHE_HOME/modules/) - 检查
httpd.conf中是否自动添加或需手动加入:LoadModule http2_module modules/mod_http2.so - 确保 SSL 模块已启用:
LoadModule ssl_module modules/mod_ssl.so - 确认已加载
socache_shmcb_module(用于 TLS 会话缓存)
虚拟主机中启用 h2 协议并验证
仅编译支持还不够,还需在 HTTPS 虚拟主机中激活协议协商:
- 在
<VirtualHost *:443>块内添加:Protocols h2 http/1.1 - 确保该虚拟主机已启用
SSLEngine on,且 TLS 版本 ≥ 1.2(推荐SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1) - 重启 Apache:
apachectl restart或systemctl restart httpd - 验证:
curl -I --http2 https://yourdomain.com应返回正常响应头;浏览器 DevTools Network 标签页中请求 Protocol 列显示h2
若启动失败并报错 “Cannot load mod_http2.so: undefined symbol: nghttp2…”,说明 nghttp2 共享库未被运行时找到,需将 nghttp2 的 lib 目录(如 /usr/local/lib)加入 /etc/ld.so.conf.d/ 并执行 ldconfig。

















