图文详解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配置并兼容HTTP实现代码解析
Mar 31 Servers
nginx简单配置多个server的方法
Mar 31 Servers
Nginx域名转发https访问的实现
Mar 31 Servers
Apache Calcite 实现方言转换的代码
Apr 24 Servers
nginx+lua单机上万并发的实现
May 31 Servers
nginx结合openssl实现https的方法
Jul 25 Servers
Nginx禁止ip访问或非法域名访问
Apr 07 Servers
Nginx配置根据url参数重定向
Apr 11 Servers
Docker 镜像介绍以及commit相关操作
Apr 13 Servers
Windows server 2012搭建FTP服务器
Apr 29 Servers
netty 实现tomcat的示例代码
Jun 05 Servers
nginx访问报403错误的几种情况详解
Jul 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
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
弹出广告特效(一个IP只弹出一次)的代码
2007/07/27 Javascript
javascript下IE与FF兼容函数收集
2008/09/17 Javascript
javascript下4个跨浏览器必备的函数
2010/03/07 Javascript
Jquery提交表单 Form.js官方插件介绍
2012/03/01 Javascript
jquery offset函数应用实例
2012/11/14 Javascript
node.js学习总结之调式代码的方法
2014/06/25 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
当jquery ajax遇上401请求的解决方法
2016/05/19 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
Angular.JS学习之依赖注入$injector详析
2016/10/20 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
JS原生带小白点轮播图实例讲解
2017/07/22 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
[01:14]DOTA2亚洲邀请赛 ShowOpen
2015/02/07 DOTA
使用Python对Excel进行读写操作
2017/03/30 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
python栈的基本定义与使用方法示例【初始化、赋值、入栈、出栈等】
2019/10/24 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
python:批量统计xml中各类目标的数量案例
2020/03/10 Python
django rest framework 过滤时间操作
2020/07/12 Python
PyQt5 QDockWidget控件应用详解
2020/08/12 Python
python 实时调取摄像头的示例代码
2020/11/25 Python
CSS3简单实现照片墙
2014/12/12 HTML / CSS
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
保护环境倡议书范文
2014/05/13 职场文书
求职信结尾怎么写
2014/05/26 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
2015年房地产个人工作总结
2015/05/26 职场文书
2015初一年级组工作总结
2015/07/24 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
sql注入教程之类型以及提交注入
2021/08/02 MySQL
你真的会用Mysql的explain吗
2022/03/31 MySQL