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

相关推荐
虎头金猫4 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
还是大剑师兰特4 天前
解决nginx错误:http://localhost:7000正常,http://localhost:7000/map 报错404
nginx·大剑师
wuyk5554 天前
《WiFi 嵌入式物联网开发全套实战》| 第 16 章 ESP32 AP+STA 双模共存原理与工程坑点
网络·stm32·物联网
xing-xing4 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
-梅4 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog4 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发
琥珀色糖4 天前
SimlpeHttp
linux·服务器
第十人i4 天前
Linux 日志管理系统:journald 配置与优化
linux·服务器
QYRdata4 天前
年均增速24.2%!机器人数据湖未来六年增长动能强劲
网络·机器人·服务发现
CHENKONG_CK4 天前
破解制鞋打磨痛点:RFID赋能去毛刺工序自动化升级
网络·单片机·嵌入式硬件·网络协议·tcp/ip