Nginx启用HTTP/2需满足:1.9.5+版本、OpenSSL 1.0.2+(推荐1.1.1+)、编译时显式启用--with-http_v2_module及--with-http_ssl_module,并配置listen 443 ssl http2;验证用curl -I --http2。

要在Linux下通过源码编译安装Nginx并启用 http_v2_module(即HTTP/2支持),核心前提是:Nginx 1.9.5+ 版本、OpenSSL 1.0.2+(推荐1.1.1+)、且编译时显式启用 --with-http_v2_module 和兼容的TLS库。缺一不可。
确认系统环境与依赖
HTTP/2 在 Nginx 中仅工作于 HTTPS(即 TLS)连接,因此必须依赖 OpenSSL 提供 ALPN 协议支持(用于协商 HTTP/2)。请按顺序检查:
- 运行
openssl version,确保为 1.0.2e 或更高版本;若低于此(如 CentOS 7 默认的 1.0.2k 实际可用,但旧版 1.0.1e 不支持 ALPN),需升级 OpenSSL - 确认已安装开发包:
yum groupinstall "Development Tools"(CentOS/RHEL)或apt install build-essential libpcre3-dev zlib1g-dev libssl-dev(Ubuntu/Debian) - 若系统 OpenSSL 过旧,可下载新版源码编译安装(例如到
/usr/local/ssl),后续配置 Nginx 编译时指定路径
下载并解压 Nginx 源码
建议使用稳定最新版(如当前为 1.24.x 或 1.25.x),避免使用过时分支:
- 执行:
wget https://nginx.org/download/nginx-1.25.3.tar.gz && tar -zxvf nginx-1.25.3.tar.gz && cd nginx-1.25.3 - 注意:不要用系统包管理器自带的 nginx 源码包(如
nginx-source),它们通常未开启 HTTP/2 且难以自定义模块
配置编译参数并启用 http_v2_module
关键在于正确传递 OpenSSL 路径和启用必要模块。典型 configure 命令如下(根据 OpenSSL 安装位置调整):
- 若系统 OpenSSL 已满足要求(
openssl version显示 ≥1.0.2e):./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module - 若 OpenSSL 安装在
/usr/local/ssl(常见于手动编译安装):./configure --prefix=/usr/local/nginx --with-openssl=/usr/local/ssl --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module - 务必包含
--with-http_ssl_module——http_v2_module依赖它;--with-http_stub_status_module非必需,但便于后续监控 - 执行
make && sudo make install完成安装
验证 HTTP/2 是否生效
安装完成后需配置 HTTPS 站点并启用 HTTP/2,再通过客户端验证:
- 编辑
/usr/local/nginx/conf/nginx.conf,在 server 块中将listen 443 ssl;改为listen 443 ssl http2; - 确保已配置有效的 SSL 证书(自签名亦可测试,但浏览器可能警告)
- 重启 Nginx:
/usr/local/nginx/sbin/nginx -s reload - 使用 curl 测试:
curl -I --http2 https://your-domain.com,响应头中应含HTTP/2 200;也可用 Chrome 开发者工具 → Network → Header → Protocol 列查看是否显示h2

















