图文详解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 负载均衡是什么以及该如何配置
Mar 31 Servers
使用 Apache Superset 可视化 ClickHouse 数据的两种方法
Jul 07 Servers
Nginx配置之实现多台服务器负载均衡
Aug 02 Servers
解决使用了nginx获取IP地址都是127.0.0.1 的问题
Sep 25 Servers
Nginx动静分离配置实现与说明
Apr 07 Servers
Tomcat执行startup.bat出现闪退的原因及解决办法
Apr 20 Servers
Windows Server 2019 配置远程控制以及管理方法
Apr 28 Servers
Nginx 配置 HTTPS的详细过程
May 30 Servers
解决Vmware虚拟机安装centos8报错“Section %Packages Does Not End With %End. Pane Is Dead”
Jun 01 Servers
Linux磁盘管理方法介绍
Jun 01 Servers
vscode内网访问服务器的方法
Jun 28 Servers
本地搭建minio文件服务器(使用bat脚本启动)的方法
Jul 15 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
PHP 和 MySQL 基础教程(一)
2006/10/09 PHP
解析PHP获取当前网址及域名的实现代码
2013/06/23 PHP
[原创]php获取数组中键值最大数组项的索引值
2015/03/17 PHP
PHP实现倒计时功能
2020/11/16 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
asp.net中System.Timers.Timer的使用方法
2013/03/20 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
js实现div的切换特效上一个下一个
2014/02/11 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
原生javascript实现图片滚动、延时加载功能
2015/01/12 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
微信小程序 wxapp内容组件 text详细介绍
2016/10/31 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
微信小程序登录对接Django后端实现JWT方式验证登录详解
2019/07/29 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
Python压缩和解压缩zip文件
2015/02/14 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
Python交互环境下实现输入代码
2018/06/22 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
python支持多线程的爬虫实例
2019/12/21 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
求职信的最佳写作思路
2014/02/01 职场文书
知名企业招聘广告词大全
2014/03/18 职场文书
企业新年寄语
2014/04/04 职场文书
庆六一文艺汇演活动方案
2014/08/26 职场文书
语文课外活动总结
2014/08/27 职场文书
党员教师个人对照检查材料范文
2014/09/25 职场文书
婚宴致辞
2015/07/28 职场文书
go web 预防跨站脚本的实现方式
2021/06/11 Golang
CSS变量实现主题切换的方法
2021/06/23 HTML / CSS
JavaWeb 入门:Hello Servlet
2021/07/16 Java/Android