图文详解Nginx版本平滑升级方案


Posted in Servers onSeptember 15, 2021

背景:

由于负载均衡测试服务器中nginx版本过低,存在安全漏洞,查询相关修复漏洞资料,需要采取nginx版本升级形式对漏洞进行修复。

Nginx平滑升级方案

1、案例采用版本介绍

旧版本 nginx-1.12.2.tar.gz

新版本 nginx-1.20.1.tar.gz

2、nginx-1.12.2版本为当前运行版本

图文详解Nginx版本平滑升级方案
图文详解Nginx版本平滑升级方案

设置端口8080和对主页index.html进行修改,后续进行平滑升级后,依然可以对其访问。

图文详解Nginx版本平滑升级方案

3、解压新版本 nginx-1.20.1.tar.gz编译安装至旧版本nginx-1.12.2目录下,运行原有nginx.conf配置文件,执行如下

./configure --prefix=/usr/local/nginx-1.12.2  --conf-path=/usr/local/nginx-1.12.2/nginx.conf --pid-path=/usr/local/nginx-1.12.2/nginx.pid --user=ngadm --group=ngadm --with-http_stub_status_module --without-http_rewrite_module 

make && make install

4、完成后1.20.1版本会自动在原sbin目录下生产新的nginx二进制文件,旧的nginx会自动被替换成nginx.old

图文详解Nginx版本平滑升级方案

5、平滑升级

Nginx对进程的控制能力非常强大,可以通过信号指令控制进程。常用的信号有:

  • -QUIT,表处理完当前请求后,关闭进程。
  • -HUP,表示重新加载配置,也就是关闭原有的进程,并开启新的工作进程。此操作不会中断用户的访问请求,因此可以通过此信号平滑的重启Nginx。
  • -USR2,用于平滑升级可执行程序。
  • -WINCH,从容关闭工作进程。

根据nginx进程控制信号,执行如下:

kill -USR2 38323(旧进程PID为38323)
ps -ef |grep nginx

图文详解Nginx版本平滑升级方案

切换为新的master进程,关闭旧的work进程,注意此时旧的master进程依然存在,执行如下:

kill ?WINCH 38323 (旧进程PID为38323)
ps -ef |grep nginx

图文详解Nginx版本平滑升级方案

检查此时版本

sbin/nginx -v

图文详解Nginx版本平滑升级方案

已平滑升级成功。

注意:此时新版本nginx的masterPID为41063,同时也存在旧版本的master进程(旧进程PID为38323),若无需再回退时操作,可执行旧进程退出操作,执行如下:

kill ?QUIT 38323

回退步骤

关于回退操作分为两类:

1、事前对旧版本nginx进行备份,若出现问题,直接将旧版本重新拷贝会/usr/local目录下,重启nginx旧版本操作,执行如下:

killall nginx
cp nginx-1.12.2.bak nginx-1.12.2
/usr/local/nginx-1.12.2/sbin/nginx ?c /usr/local/nginx-1.12.2/nginx.conf

检查nginx状态
ps ?ef |grep nginx

2、在新版本nginx的master进程和旧版本的master进程同时存在时,执行如下:

切换回旧版本的master进程

kill -HUP 旧masterPID

图文详解Nginx版本平滑升级方案

关闭新版本nginx的master进程,并将原sbin目录下的nginx.old(旧版本nginx二进制文件)重新改回nginx,以便管理nginx。

kill -WINCH 新masterPID
kill -QUIT 新masterPID
cp /usr/local/nginx-1.12.2/sbin/nginx.old /usr/local/nginx-1.12.2/sbin/nginx

图文详解Nginx版本平滑升级方案

再次确认此时nginx版本已退回原版本

sbin/nginx -v

图文详解Nginx版本平滑升级方案

总结

到此这篇关于Nginx版本平滑升级方案的文章就介绍到这了,更多相关Nginx版本平滑升级内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Servers 相关文章推荐
基于Nginx实现限制某IP短时间访问次数
Mar 31 Servers
Nginx域名转发使用场景代码实例
Mar 31 Servers
Nginx安装完成没有生成sbin目录的解决方法
Mar 31 Servers
Linux中Nginx的防盗链和优化的实现代码
Jun 20 Servers
nginx共享内存的机制详解
Mar 21 Servers
Nginx动静分离配置实现与说明
Apr 07 Servers
如何Tomcat中使用ipv6地址
May 06 Servers
linux目录管理方法介绍
Jun 01 Servers
教你如何用cmd快速登录服务器
Jun 10 Servers
WinServer2012搭建DNS服务器的方法步骤
Jun 10 Servers
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
Aug 14 Servers
服务器nginx权限被拒绝解决案例
Sep 23 Servers
Nginx配置文件详解以及优化建议指南
Sep 15 #Servers
学习nginx基础知识
Nginx location 和 proxy_pass路径配置问题小结
Sep 04 #Servers
Nginx使用Lua模块实现WAF的原理解析
Nginx部署vue项目和配置代理的问题解析
centos8安装nginx1.9.1的详细过程
Aug 02 #Servers
Nginx反向代理至go-fastdfs案例讲解
Aug 02 #Servers
You might like
从零开始的异世界生活:第二季延期后,B站上架了第二部剧场版
2020/05/06 日漫
解决php中Cannot send session cache limiter 的问题的方法
2007/04/27 PHP
兼容firefox,chrome的网页灰度效果
2011/08/08 PHP
PHP 线程安全与非线程安全版本的区别深入解析
2013/08/06 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
2017/08/07 PHP
使用EXT实现无刷新动态调用股票信息
2008/11/01 Javascript
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
JavaScript控制网页平滑滚动到指定元素位置的方法
2015/04/17 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
js控制div弹出层实现方法
2015/05/11 Javascript
浅谈$(document)和$(window)的区别
2015/07/15 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
了解JavaScript中let语句
2019/05/30 Javascript
js实现查询商品案例
2020/07/22 Javascript
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
详解Django框架中的视图级缓存
2015/07/23 Python
django+mysql的使用示例
2018/11/23 Python
opencv 图像加法与图像融合的实现代码
2020/07/08 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
python制作微博图片爬取工具
2021/01/16 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
sealed修饰符是干什么的
2012/10/23 面试题
注塑工厂厂长岗位职责
2013/12/02 职场文书
会计专业个人求职信范文
2014/01/08 职场文书
杠杆的科学教学反思
2014/01/10 职场文书
初中数学教学反思
2014/01/16 职场文书
《彩色世界》教学反思
2014/04/12 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
党支部四风整改方案
2014/10/25 职场文书
docker-compose部署Yapi的方法
2022/04/08 Servers