当前位置: 首页 > news >正文

【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 820 12:40 nginx.pid
-rw-r--r--  1 root           root              5 820 10:08 nginx.pid.oldbin

5.关闭旧进程

kill -9 <旧 master pid>

总结

  • 强制替换:快刀斩乱麻 → 简单,但会闪断

  • 平滑替换:温水煮青蛙 → 稍复杂,但生产必备

最佳实践

  • 小规模业务 → 强制替换即可

  • 核心系统 → 平滑替换必选

  • 跨大版本升级 → 提前测试兼容性


文章转载自:

http://t4Fk1ACb.ttkns.cn
http://qDu43RNe.ttkns.cn
http://vm42OH6z.ttkns.cn
http://nJ4K5hJb.ttkns.cn
http://RdbJPtri.ttkns.cn
http://MfwTBJOO.ttkns.cn
http://zXheC8K3.ttkns.cn
http://ExTjzoxI.ttkns.cn
http://L3PqzCGO.ttkns.cn
http://F2hWGKXL.ttkns.cn
http://8WyhzqdC.ttkns.cn
http://aRrqhAjB.ttkns.cn
http://hfptaPjY.ttkns.cn
http://WPYAqoy8.ttkns.cn
http://JRZRdTjL.ttkns.cn
http://qpDg15Q2.ttkns.cn
http://PO1nAH7C.ttkns.cn
http://s4E48sjO.ttkns.cn
http://d6xGqbFi.ttkns.cn
http://Er4Tu4Wg.ttkns.cn
http://QZ4a8giQ.ttkns.cn
http://BoqpDoIj.ttkns.cn
http://VHXN7E7i.ttkns.cn
http://Cdb2fApm.ttkns.cn
http://drmvhXL7.ttkns.cn
http://nrAVKJ9U.ttkns.cn
http://LRuAw2Mo.ttkns.cn
http://crCWfGBU.ttkns.cn
http://o2O2J1Xv.ttkns.cn
http://TiKgNHIE.ttkns.cn
http://www.dtcms.com/a/375905.html

相关文章:

  • HTTPS加解密流程解析
  • Android 升级minSdkVersion 导致 包体积变大的处理
  • Linux系统 Python3.12版本连接达梦数据库dmPython和django_dmPython
  • 零知开源——ESP32驱动OV7670摄像头实现简易照相机系统
  • 前端开发工具trae的使用
  • Coze源码分析-资源库-创建插件-前端源码-核心组件
  • 数据集成平台怎么选?从ETL到CDC再到iPaaS的全景对比
  • 【Linux基础】Linux系统配置IP详解:从入门到精通
  • 2025版基于springboot的企业考勤管理系统
  • 【计算机毕业设计选题】2025-2026年计算机毕业设计选题经验与项目推荐
  • Python数据处理管道完全指南:从基础到高并发系统实战
  • VMware安装CentOS 7教程
  • SpringBoot + MinIO/S3 文件服务实现:FileService 接口与 FileServiceImpl 详解
  • 如何确定丝杆升降机的额定负载和峰值负载?
  • AI 与 Web3 技术写作大赛,瓜分 2000RMB
  • git 合并多条commit
  • 联邦学习指导、代码、实验、创新点
  • 开源 C++ QT Widget 开发(十五)多媒体--音频播放
  • 绿算技术闪耀智博会 赋能乡村振兴与产业升级
  • 差分数组(Difference Array)
  • 【硬核测评】格行ASR芯片+智能切网算法源码级解析(附高铁场景切换成功率99%方案)
  • 【git】首次clone的使用采用-b指定了分支,还使用了--depth=1 后续在这个基础上拉取所有的分支代码方法
  • AI时尚革命:Google Nano Banana如何颠覆传统穿搭创作
  • OpenCV 高阶 图像金字塔 用法解析及案例实现
  • 【系统分析师】第19章-关键技术:大数据处理系统分析与设计(核心总结)
  • Gears实测室:第一期·音游跨设备性能表现与工具价值实践
  • Next.js中服务器端渲染 (SSR) 详解:动态内容与 SEO 的完美结合
  • C++学习记录(7)vector
  • 【代码随想录算法训练营——Day7】哈希表——454.四数相加II、383.赎金信、15.三数之和、18.四数之和
  • IT 资产管理系统与 IT 服务管理:构建企业数字化的双引擎