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

相关推荐
迪康Defender10 分钟前
AI 重构终端安全运营:智能分析中枢 AI Insight 模块架构与落地场景深度解析
运维·网络·人工智能·其他·安全·重构·架构
那年窗外下的雪.23 分钟前
AIDC 学习日志 第 04 天 BGP Underlay 基础与路由选择
服务器·学习·php
0x5338 分钟前
Java网络编程(二)
java·服务器·网络
小绫网络安全2 小时前
Kali Linux渗透测试入门教程:从零搭建到实战攻防
linux·运维·服务器
西安景驰电子2 小时前
《PTP精确时间协议系列》第一篇:从原理到应用,全面解读IEEE 1588
linux·运维·服务器·开发语言·网络·windows·php
luj_17683 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
水无痕simon3 小时前
3 短信应用场景以及平台架构
java·服务器
ZGi.ai3 小时前
多模型回答不稳定:路由规则与评测方法
网络·人工智能·大模型评测·多模型·模型路由·zgi·模型网关
80s7774 小时前
独享住宅IP、长效代理ip是什么?有哪些作用?
网络·网络协议·tcp/ip
IPdodo_4 小时前
静态 IP、住宅 IP 和固定出口有什么区别?开发场景选型指南
服务器·网络·网络协议·tcp/ip·代理ip