马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
漏扫报出 Nginx 漏洞 CVE-2024-7347 之后,最省事的处理不是打补丁包,而是直接升级到新版本——前提是你的配置和数据都不能丢。下面这几种操作在 /usr/local 下手工编译安装的 Nginx 上通用,核心思路是:先备份,再编译新版本覆盖,最后用 kill 信号做平滑切换,全程不断连。
一、备份现有配置与安装目录
先备份配置文件:
cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
再把整个安装目录拷一份,出问题能整目录回滚:
cp -r /usr/local/nginx /usr/local/nginx-1.23.3.bak
二、下载并解压新版本
从 Nginx 官方站点取 1.27.2 的安装包:
cd /usr/local/
tar -zxvf nginx-1.27.2.tar.gz
三、编译安装(重点:保留原模块)
cd /usr/local/nginx-1.27.2
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-stream --with-stream_ssl_module --with-pcre
make && make install
这里 --prefix=/usr/local/nginx 就是保住原配置的关键:装到同一个目录,原有的 conf、logs、站点目录都不会被新版本另起一套。
后面的模块开关按你实际用过的补:1.23.3 里如果自己加了第三方模块或额外编译选项,这一步必须对应加上,否则升级完功能会少了。
四、平滑升级:三步 kill
- 给旧的主进程发 USR2,让它重载配置并启动新版本的工作进程:
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
- 确认新进程起来后,平滑关闭旧版本的工作进程:
kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin`
- 确认升级没问题,再关掉旧的主进程:
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
三个信号的含义要分清:USR2 是"启动新版本",WINCH 是"优雅退旧 worker",QUIT 是"退旧 master"。顺序颠倒就会出现旧 worker 与新 worker 并存、或者短暂 502。
五、核验与排错
# 检查配置语法
/usr/local/nginx/sbin/nginx -t
# 查看版本
/usr/local/nginx/sbin/nginx -V
# 看进程
ps -ef | grep nginx
如果发现没有 nginx 进程在跑,说明服务没起来或已被停止;进程在但功能报错,可能是 pid 文件出了问题。先删掉旧的 pid 文件再起:
rm /usr/local/nginx/logs/nginx.pid
cd /usr/local/nginx/sbin
./nginx
启动成功的话,Nginx 会重新生成一个 pid 文件,里面是正确的进程号。若 nginx -t 直接报错,先把 nginx.conf 里语法错误的地方改对再重启——这条比升级本身更容易踩。
六、升级之后别忘的四件事
- 回归测试:核心页面、SSL 握手、反向代理、静态资源各点一遍,尤其是带证书的站点。
- 宏定义核对:确认
nginx -V 的输出里含你需要的模块。
- 备份保留:备份目录和旧版本目录先别删,稳定一周后再清。
- 纳入版本记录:把升级时间、版本号、改动点写进变更记录,下次排查才对得上。
qidao123.com企服评测-应用市场 编辑提示
本文针对手工编译安装的 Nginx,给出备份配置与安装目录、同 prefix 编译安装新版本、USR2/WINCH/QUIT 三步平滑升级、nginx -t 与 -V 验证及 pid 文件异常处理的操作流程,并补充升级后的回归项。操作前请确认配置已完整备份、业务侧知晓切换窗口;平滑升级仍属于线上变更,建议先在测试环境跑一遍再对生产执行。 |