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

相关推荐
ZStack开发者社区几秒前
ZSTACK · 答客问 | 什么时候该升级,什么时候再等等
网络·云计算
MXsoft6189 分钟前
**混合云统一监控实践:私有云+公有云的一体化运维方案**
运维·网络·数据库
天南散修15 分钟前
MT7916驱动中802.11转换为802.3
linux·网络·驱动开发·wifi·802.11
其实防守也摸鱼29 分钟前
无线网络安全--10 规避WLAN验证之挫败MAC地址限制
网络·智能路由器·php·教程·虚拟机·wlan·无线网络安全
TechWayfarer36 分钟前
云服务器地域怎么选:用离线IP数据库识别用户来源并优化部署
服务器·数据库·python·tcp/ip·数据分析
xiaoxiaoxiaolll37 分钟前
《Nature Communications》亮点文章:自供电双窄带OPD如何实现1.25 Mbps下的抗窃听光通信?
网络
CriticalThinking1 小时前
在xshell中使用ssh隧道访问远程服务
linux·网络·ssh
爱装代码的小瓶子1 小时前
安工大题目分类(含解析和翻译)
linux·网络·c
Solis程序员2 小时前
长会话状态治理(下):数据更新机制、并发保护与可复用设计原则
运维·服务器
IpdataCloud2 小时前
跨境支付如何识别高风险IP?用IP风险画像服务选型与集成指南
服务器·网络·数据库·tcp/ip·安全