图文详解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 502 Bad Gateway错误原因及解决方案
Mar 31 Servers
nginx location中多个if里面proxy_pass的方法
Mar 31 Servers
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
May 27 Servers
解析在浏览器地址栏输入一个URL后发生了什么
Jun 21 Servers
使用Nginx搭载rtmp直播服务器的方法
Oct 16 Servers
nginx从安装到配置详细说明(安装,安全配置,防盗链,动静分离,配置 HTTPS,性能优化)
Feb 12 Servers
使用Nginx的访问日志统计PV与UV
May 06 Servers
nginx实现多geoserver服务的负载均衡
May 15 Servers
详解ZABBIX监控ESXI主机的问题
Jun 21 Servers
超越Nginx的Web服务器caddy优雅用法
Jun 21 Servers
nginx访问报403错误的几种情况详解
Jul 23 Servers
Docker容器harbor私有仓库部署和管理
Aug 05 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
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
php批量删除数据库下指定前缀的表以prefix_为例
2014/08/24 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
PHP设计模式之策略模式原理与用法实例分析
2019/04/04 PHP
Laravel 在views中加载公共页面的实现代码
2019/10/22 PHP
VBScript版代码高亮
2006/06/26 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
javascript常用的方法整理
2015/08/20 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
如何用原生js写一个弹窗消息提醒插件
2019/05/24 Javascript
小程序实现分类页
2019/07/12 Javascript
解析JS在获取当前月的最后一天遇到的坑
2019/08/30 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
Python while、for、生成器、列表推导等语句的执行效率测试
2015/06/03 Python
Python实现简单截取中文字符串的方法
2015/06/15 Python
Python实现简单的四则运算计算器
2016/11/02 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
tensorflow 获取所有variable或tensor的name示例
2020/01/04 Python
python与mysql数据库交互的实现
2020/01/06 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
python自动化测试三部曲之unittest框架的实现
2020/10/07 Python
《爱如茉莉》教后反思
2014/04/12 职场文书
公司保洁员管理制度
2015/08/04 职场文书
婚礼长辈答谢词
2015/09/29 职场文书
幼儿园教师教学反思
2016/03/02 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
财务会计个人原因辞职信
2019/06/21 职场文书
导游词之黄果树瀑布
2019/09/20 职场文书
MySQL 服务和数据库管理
2021/11/11 MySQL
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js