【Nginx 运维实战】版本替换:强制 vs 平滑升级全解析
【Nginx 运维实战】版本替换:强制 vs 平滑升级全解析
- 一:版本替换的两种思路
- 二:使用场景对比
- 三:实战
- 1)`强制替换`
- 1.备份旧版本
- 2.替换为新版本
- 3.**赋予执行权限**
- 4.**重启 `Nginx`**
- 2)`平滑替换`
- 1.确认进程文件
- 2.备份旧版本
- 3.替换为新版本
- 4.发送 `USR2` 信号
- 5.关闭旧进程
- 总结
🚀 在日常运维中,Nginx 升级是一个绕不开的需求。无论是功能优化、漏洞修复,还是安全加固,我们都需要定期替换新版本。但如何在 不中断业务 的前提下完成替换?本文将带你深入理解 Nginx 版本替换的两种方式:强制替换和平滑替换。
一:版本替换的两种思路
强制替换
- 原理:直接覆盖旧二进制 →
systemctl restart nginx
- 特点:整个过程会有 短暂的服务中断
- 原理:直接覆盖旧二进制 →
平滑替换
- 原理:发送
USR2
信号 → 新旧进程并存 → 等待旧请求处理完再关闭 - 特点:无中断升级,升级体验丝滑
- 原理:发送
二:使用场景对比
替换方式 | ✅ 适合场景 | ❌ 不适合场景 |
---|---|---|
强制替换 | - 测试 / 开发环境 - 小流量业务 - 一次性部署 | - 高可用生产环境 |
平滑替换 | - 生产环境 - 高并发业务 - 小版本更新、安全补丁 | - 非生产环境 - 跨大版本升级 |
三:实战
1)强制替换
⚠️ 注意:会有几秒钟的中断,不推荐生产使用。
1.备份旧版本
# 查找 Nginx 命令目录
which nginx
/usr/sbin/nginx
# 备份旧版本 Nginx(可选,也可以直接删掉)
mv /usr/sbin/nginx /usr/sbin/nginx-<版本号>
2.替换为新版本
cp -r nginx /usr/sbin
3.赋予执行权限
chmod 755 /usr/sbin/nginx
4.重启 Nginx
systemctl restart nginx
2)平滑替换
🎉最终效果:新进程接管流量,零中断完成升级
1.确认进程文件
ls -l /var/run/ | grep nginx*
cat /var/run/nginx.pid
2.备份旧版本
# 查找 Nginx 命令目录
which nginx
/usr/sbin/nginx
# 备份旧版本 Nginx(可选,也可以直接删掉)
mv /usr/sbin/nginx /usr/sbin/nginx-<版本号>
3.替换为新版本
cp -r nginx /usr/sbin
4.发送 USR2
信号
✅ 结果:
nginx.pid
:新进程nginx.pid.oldbin
: 旧进程
kill -USR2 `cat /var/run/nginx.pid`
ls -l /var/run/ | grep nginx*
-rw-r--r-- 1 root root 7 8月 20 12:40 nginx.pid
-rw-r--r-- 1 root root 5 8月 20 10:08 nginx.pid.oldbin
5.关闭旧进程
kill -9 <旧 master pid>
总结
-
强制替换:快刀斩乱麻 → 简单,但会闪断
-
平滑替换:温水煮青蛙 → 稍复杂,但生产必备
✨ 最佳实践
-
小规模业务 → 强制替换即可
-
核心系统 → 平滑替换必选
-
跨大版本升级 → 提前测试兼容性