Nginx 升级,平滑升级不停服务

Nginx 平滑升级

因为nginx漏洞需要升级nginx ,找了资料,记录一下操作步骤

备份

备份配置文件

cp -r /home/admin/nginx/conf /home/admin/nginx/conf_bak_$(date +%Y%m%d)

备份二进制文件

cp /home/admin/nginx/sbin/nginx /home/admin/nginx/sbin/nginx.old

下载新版本nginx

https://nginx.org/en/download.html

解压nginx

tar -xzvf nginx-1.30.2.tar.gz

查看旧版本参数 /home/admin/nginx/sbin/nginx -V

configure arguments: --prefix=/home/admin/nginx22 --with-http_stub_status_module --with-http_ssl_module

使用旧版本参数编译新版本(只mark,不mark install)

cd nginx-1.30.2

./configure --prefix=/home/admin/nginx --with-http_stub_status_module --with-http_ssl_module

make

mv 备份旧文件

mv /home/admin/nginx/sbin/nginx /home/admin/nginx/sbin/nginx.old.bak

复制新二进制文件

cp /home/admin/nginx-1.30.2/objs/nginx /home/admin/nginx/sbin/nginx

找到旧 master 进程 PID

cat /home/admin/nginx/logs/nginx.pid

发送 USR2 信号 → 启动新版本 master 进程(接管端口)

kill -USR2 15352

验证新 master 已启动

ps aux | grep nginx

应看到两个 master

旧 master PID 保存在 nginx.pid.oldbin 中

cat /home/admin/nginx/logs/nginx.pid.oldbin # 记录旧 master PID,回滚要用

发送 WINCH 信号 → 旧 master 逐步关闭旧 worker

kill -WINCH 15352

等待几秒后,旧 worker 应全部退出

sleep 3

ps aux | grep nginx | grep worker

确认没有旧版本的 worker 了

发送 QUIT 信号 → 优雅关闭旧 master

kill -QUIT 15352

验证

看版本

/home/admin/nginx/sbin/nginx -V

看进程(不会有两个master)

ps aux | grep nginx

看配置

/home/admin/nginx/sbin/nginx -t

异常回滚

阶段A 回滚(刚发 USR2,最快)

旧 Master 还在,旧 Worker 还在,直接切回去

① 旧 Master 重新接管(发 HUP 重新加载配置)

kill -HUP $(cat /home/admin/nginx22/logs/nginx.pid.oldbin)

② 新 Master 退出

kill -QUIT $(cat /home/admin/nginx22/logs/nginx.pid)

③ 验证回滚成功

/home/admin/nginx22/sbin/nginx -v

应该显示旧版本号

阶段B 回滚(已发 WINCH,旧 Worker 已退出)

旧 Worker 已经死了,但旧 Master 还在,需要先让旧 Master 重新拉起 Worker

① 旧 Master 重新加载配置(会自动拉起新 Worker)

kill -HUP $(cat /home/admin/nginx22/logs/nginx.pid.oldbin)

② 等待几秒,确认旧 Worker 已启动

ps aux | grep nginx | grep -v grep

③ 新 Master 退出

kill -QUIT $(cat /home/admin/nginx22/logs/nginx.pid)

④ 验证

/home/admin/nginx22/sbin/nginx -v

阶段C 回滚(已发 QUIT,旧 Master 已死,最坏情况)

旧 Master 已经退出了,只能用备份的 nginx.old 重启

停止新版本

kill -QUIT $(cat /home/admin/nginx22/logs/nginx.pid)

恢复旧二进制

cp /home/admin/nginx22/sbin/nginx.old /home/admin/nginx22/sbin/nginx

启动旧版本

/home/admin/nginx22/sbin/nginx

相关推荐
无足鸟ICT23 分钟前
【RHCA+】查看变量
linux·运维·服务器
Kina_C32 分钟前
Linux DNS 服务器-从高速缓存到辅助 DNS 部署指南
linux·运维·服务器·dns
EasyGBS1 小时前
ONVIF设备接入国标GB28181视频平台EasyGBS:不用国标也能一键拉流!
服务器·php·音视频
上海云盾-高防顾问1 小时前
SD-WAN 跨境加速,真实日常使用体验
网络·网络安全
2401_873479401 小时前
SOC告警日志中IP归属不明怎么办?部署IP离线库三步提升响应效率
网络·网络协议·tcp/ip
Multipath7122 小时前
多链路聚合 + 宽带自组网 + 卫星便携站,构筑应急通信“铁三角”乾元通多链路聚合路由破局“三断”绝境,重构应急通信生命线
网络·5g·安全·智能路由器·实时音视频
nVisual2 小时前
机柜PDU安装位置与空间建模方案
大数据·网络·数据库·信息可视化·数据中心基础设施管理
小小代码狗2 小时前
SQLi-Labs 基础注入实战教程(Less-1 ~ Less-5and Less-9)
服务器·python·php
慕伏白2 小时前
【慕伏白】Linux 系统如何根据端口号关闭进程
linux·运维·服务器
蓝创工坊Blue Foundry2 小时前
图片文字提取到 Excel:批量任务如何先定义要交付的字段
运维·服务器·开发语言·数据库·自动化·ocr·excel