旧版 Nginx 不支持 HTTP/2 通常是因为版本低于 1.9.5,平滑升级推荐通过系统包管理器更新或编译新版本,重点在于保留原有配置并确保 SSL 配置符合 HTTP/2 要求。升级过程可通过 nginx -s reload 实现不中断服务。
先说结论:升级 Nginx 至 1.9.5 及以上版本即可原生支持 HTTP/2,无需更换软件,但必须配置 HTTPS。
- 适合:生产环境 Nginx 版本低于 1.9.5 且需要启用 HTTP/2 协议的场景。
- 先准备:备份当前配置文件与二进制文件,确认 SSL 证书有效且 TLS 版本支持。
- 验收:使用 curl 或浏览器开发者工具确认协议版本为 h2,业务流量无报错。
命令速用版
nginx -v # 查看当前版本
nginx -t # 测试配置语法
nginx -s reload # 平滑重载配置若使用 apt/yum 包管理器,直接执行更新命令即可替换二进制文件。
为什么会这样
Nginx 从 1.9.5 版本开始正式支持 HTTP/2 协议,此前版本仅支持已废弃的 SPDY 协议。
现代浏览器逐步停止支持 SPDY,强制要求 HTTP/2 或 HTTP/3 以提升性能。旧版本二进制文件缺乏相关代码模块,因此必须升级核心程序。
分步处理
第一步:备份现有环境
复制当前配置文件目录和二进制文件到临时位置,防止升级失败无法回滚。
cp -r /etc/nginx /etc/nginx.bak
cp /usr/sbin/nginx /usr/sbin/nginx.bak第二步:升级 Nginx 版本
通过系统包管理器安装新版本,或下载源码编译安装。包管理器方式维护更方便。
# Ubuntu/Debian 示例
apt update
apt install nginx
# CentOS/RHEL 示例
yum update nginx第三步:修改配置文件
找到监听 443 端口的 server 块,将 spdy 参数替换为 http2,并确保开启 ssl。
listen 443 ssl http2;第四步:测试与重载
执行语法测试,确认无误后发送平滑重载信号。
nginx -t
nginx -s reload怎么验证是否生效
使用 curl 命令强制 HTTP/2 请求,查看响应头或协议标识。
curl -I `--http2` https://你的域名若返回 HTTP/2 相关标识或在浏览器开发者工具 Network 面板看到协议为 h2,即表示生效。
常见坑
1. 必须使用 HTTPS:HTTP/2 在主流浏览器中仅支持通过 TLS 加密传输,纯 HTTP 无法启用。
2. TLS 版本限制:建议配置 TLS 1.2 或 1.3,过低版本可能被客户端拒绝。
3. 第三方模块兼容性:编译升级时若依赖第三方模块,需确认新版本是否支持,否则编译会失败。
常见问题
最低支持 HTTP/2 的 Nginx 版本是多少?
官方正式支持 HTTP/2 的起始版本是 1.9.5。
升级 Nginx 版本会导致服务中断吗?
使用 nginx -s reload 或包管理器升级后重载,通常不会中断现有连接。
旧配置里的 spdy 参数需要删除吗?
需要,新版本中 spdy 模块已移除,保留该参数会导致配置测试失败。
参考来源
Nginx 官方 changelog 及文档说明 HTTP/2 支持情况。
URL: http://nginx.org/en/CHANGES.html