作者:Cy23
日期:2026年6月3日
环境:CentOS 6/7,NGINX 1.27.2(编译安装)
2026年5月,NGINX官方披露了一个严重漏洞 CVE-2026-42945(代号Rift),影响自0.6.27至1.30.0的绝大部分NGINX版本。漏洞存在于ngx_http_rewrite_module模块中,由于内部标志位管理错误导致堆缓冲区溢出,攻击者可利用精心构造的HTTP请求触发Worker进程崩溃,甚至实现远程代码执行。
我的服务器运行的是NGINX 1.27.2(mainline分支),恰好在受影响范围内。经过评估,决定立即升级到修复版本1.30.2(stable分支)。
首先确认当前版本和编译参数:
nginx -v
nginx -V
输出显示:
然后安装编译所需的依赖:
yum install -y gcc gcc-c++ make pcre-devel zlib-devel openssl-devel
DATE=$(date +%Y%m%d%H%M)
cp -a /usr/local/nginx /usr/local/nginx.backup.$DATE
mkdir -p /root/nginx_bak
cp -a /usr/local/nginx/conf /root/nginx_bak/conf.$DATE
if [ -f /etc/init.d/nginx ]; then cp -a /etc/init.d/nginx /root/nginx_bak/init.nginx.$DATE; fi
从nginx.org下载1.30.2稳定版源码:
cd /usr/local/src
wget https://nginx.org/download/nginx-1.30.2.tar.gz
tar -zxvf nginx-1.30.2.tar.gz
cd nginx-1.30.2
使用原编译参数进行配置:
./configure --prefix=/usr/local/nginx
编译:
make -j$(nproc)
验证编译产物:
ls -lh objs/nginx
输出显示二进制文件大小3.8M,编译成功。
先备份旧二进制:
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.old.$(date +%Y%m%d%H%M)
测试新二进制能否读取现有配置:
/usr/local/src/nginx-1.30.2/objs/nginx -t -c /usr/local/nginx/conf/nginx.conf
返回“syntax is ok”和“test is successful”。
替换二进制:
cp /usr/local/src/nginx-1.30.2/objs/nginx /usr/local/nginx/sbin/nginx
由于我的服务器使用service nginx start管理,选择允许短暂停机的重启方式(选项A):
service nginx stop
sleep 1
service nginx start
nginx -v![]()
输出:nginx version: nginx/1.30.2
nginx -t
配置语法检查通过。
ps aux | grep 'nginx:' | grep -v grep
显示一个master进程和多个worker进程正常运行。
curl -I http://127.0.0.1/
返回HTTP/1.1 200 OK,网站正常访问。
本次升级过程顺利,从发现问题、备份、编译到替换重启,总耗时约30分钟(主要花费在源码编译)。核心经验:
至此,CVE-2026-42945漏洞已成功修复,服务器安全得到保障。