Nginx HTTP2注入漏洞CVE-2026
这个漏洞到底影响谁
CVE-2026-42926 是一个出现在 Nginx HTTP/2 模块中的注入漏洞。
攻击者可以通过构造特殊的 HTTP/2 请求帧,触发内存越界或逻辑错误,导致服务器崩溃甚至远程代码执行。
如果你正在运行启用 HTTP/2 的 Nginx(尤其版本低于官方安全版本),就必须立即修复。
本文会带着你从确认版本到完成修复,每一步都写清楚命令和路径,哪怕是刚接触服务器的用户也能直接跟着做。
动手前的准备工作
在开始修复之前,先把下面几项确认好:
- 能够通过 SSH 登录到服务器,或者能使用宝塔面板等可视化工具。
- 记录当前 Nginx 版本:执行
nginx -v或nginx -V查看版本号和编译参数。 - 备份当前配置:复制一份
/etc/nginx/目录到安全位置,例如cp -r /etc/nginx /etc/nginx.bak。 - 了解服务器系统类型(CentOS、Ubuntu、Debian 等),后续安装源会不一样。
如果你用的是宝塔面板,可以在「软件商店」-「Nginx」-「设置」里看到当前版本,也可以通过面板的“备份”功能一键备份网站和配置文件。
修复方案一:升级 Nginx 到安全版本
官方的修复方式通常是发布包含补丁的新版本。
你需要将 Nginx 升级到对应安全版本(具体版本号请查看官方公告或第三方维护源)。
针对不同系统的升级命令
Ubuntu / Debian 系统:
sudo apt update
sudo apt install nginx -y
如果之前从 Nginx 官方源安装过,升级后运行 nginx -v 验证版本。
CentOS / RHEL 系统:
sudo yum update nginx -y
如果使用 EPEL 或 Nginx 官方源,命令类似。
更新后重启服务:
sudo systemctl restart nginx
宝塔面板升级方法
在宝塔面板左侧点「软件商店」,找到已安装的 Nginx,点击「设置」-「版本」-选择最新的稳定版本(官方已修复的版本),点击「更新」即可。
更新后面板会自动重启 Nginx。
升级失败的常见原因
- 添加的第三方源与系统不兼容:检查
/etc/apt/sources.list.d/nginx.list或/etc/yum.repos.d/nginx.repo是否正确。 - 配置文件存在语法错误:升级后执行
nginx -t测试配置,如果报错按错误行数修改。
修复方案二:临时禁用 HTTP/2 模块
如果因为某些原因无法立即升级,可以通过禁用 HTTP/2 来暂时规避风险。
注意这种方式会失去 HTTP/2 的多路复用和头部压缩特性,但能保证当前安全。
命令行修改方法
- 编辑 Nginx 主配置文件(通常位于
/etc/nginx/nginx.conf或/etc/nginx/conf.d/下的站点配置文件)。 - 找到
listen 443 ssl http2;,删除其中的http2,改为listen 443 ssl;。 - 保存后测试配置:
nginx -t。 - 重载 Nginx:
nginx -s reload或systemctl reload nginx。
宝塔面板修改方法
进入对应网站设置 →「SSL」-「强制 HTTPS」保持开启,然后切到「配置文件」标签,在监听行中删掉 http2 字样,保存后面板会自动重载。
验证修复是否成功
执行升级或禁用后,需要确认漏洞已被堵住。
- 确认 Nginx 版本:运行
nginx -v,看版本号是否≥官方安全版本。如果采用禁用方案,版本可能没变,但http2已去掉。 - 检查 HTTP/2 是否关闭:使用 curl 测试:
curl -I --http2 https://你的域名
如果响应头中没有 HTTP/2 字样(显示 HTTP/1.1 200 OK 等),说明禁用成功。
- 检查服务状态:
systemctl status nginx确认运行正常,没有崩溃日志。 - 查看错误日志:
tail -f /var/log/nginx/error.log,确保没有新的异常报错。
高频问题与避坑提醒
Q:升级 Nginx 后网站无法访问?
A:先执行 nginx -t 检查配置文件语法,大概率是升级后某些模块路径变了或配置项不兼容。对照备份的 .bak 文件逐段排查。
Q:只是禁用 HTTP/2,安全性够吗?
A:CVE-2026-42926 仅影响 HTTP/2 模块,禁用后攻击面消失,可作为临时缓解措施。但建议尽快升级到修复版本以获得完全修补。
Q:找不到 http2 关键字?
A:如果 Nginx 编译时没有加入 --with-http_v2_module,本来就不受此漏洞影响,无需改动。你也可以通过 nginx -V 2>&1 | grep http_v2 确认模块状态。
避坑说明:升级前务必备份配置和网站文件,尤其你自行编译的第三方模块(如 Lua、PageSpeed),升级官方包后可能丢失,需要重新编译安装。
如果你不确定如何处理,优先使用操作系统的包管理器版本,而非从源码编译。