Nginx版本平滑升级方案

摘要:
Nginx平滑升级方案1、案例采用版本介绍旧版本nginx-1.12.2.tar.gz新版本nginx-1.20.1.tar.gz2、nginx-1.12.2版本为当前运行版本设置端口8080和对主页index.html进行修改,后续进行平滑升级后,依然可以对其访问。此操作不会中断用户的访问请求,因此可以通过此信号平滑的重启Nginx。

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

Nginx平滑升级方案

1、案例采用版本介绍

旧版本 nginx-1.12.2.tar.gz
新版本 nginx-1.20.1.tar.gz

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

Nginx版本平滑升级方案第1张
Nginx版本平滑升级方案第2张

设置端口8080和对主页index.html进行修改,后续进行平滑升级后,依然可以对其访问。
Nginx版本平滑升级方案第3张

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版本平滑升级方案第4张

5、平滑升级

Nginx对进程的控制能力非常强大,可以通过信号指令控制进程。常用的信号有:
  • -QUIT,表处理完当前请求后,关闭进程。
  • -HUP,表示重新加载配置,也就是关闭原有的进程,并开启新的工作进程。此操作不会中断用户的访问请求,因此可以通过此信号平滑的重启Nginx。
  • -USR2,用于平滑升级可执行程序。
  • -WINCH,从容关闭工作进程。
根据nginx进程控制信号,执行如下:
kill -USR2 38323(旧进程PID为38323)
ps -ef |grep nginx 

Nginx版本平滑升级方案第5张

切换为新的master进程,关闭旧的work进程,注意此时旧的master进程依然存在,执行如下:
kill –WINCH 38323 (旧进程PID为38323)
ps -ef |grep nginx

Nginx版本平滑升级方案第6张

检查此时版本
sbin/nginx -v

Nginx版本平滑升级方案第7张

已平滑升级成功。
注意:此时新版本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版本平滑升级方案第8张

关闭新版本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版本平滑升级方案第9张

再次确认此时nginx版本已退回原版本
sbin/nginx -v

Nginx版本平滑升级方案第10张

免责声明:文章转载自《Nginx版本平滑升级方案》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Python函数独立星号(*)分隔的命名关键字参数纯前端版本号策略下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Openresty常用指令和参数

--[[ 参考文档: https://www.nginx.com/resources/wiki/modules/lua/#nginx-api-for-lua Nginx Lua模块指令: Nginx共11个处理阶段,而相应的处理阶段是可以做插入式处理,即可插拔式架构; 另外指令可以在http、server、server if、locatio...

nginx服务器下 PHP 出现 502 解决方案

https://blog.csdn.net/qq_34625397/article/details/51744859 nginx出现502有很多原因,但大部分原因可以归结为资源数量不够用,也就是说后端php-fpm处理有问题,nginx将正确的客户端请求发给了后端的php-fpm进程,但是因为php-fpm进程的问题导致不能正确解析php代码,最终返回给了...

nginx封IP脚本

#!/bin/bash max=4confdir=/etc/nginx/conf.d/blockips.conf logdir=/var/log/nginx/access.log echo "">$confdir cat $logdir|awk '/send_sms/ {print $1}'|sort|uniq -c|sort -n|whilerea...

nginx 转发请求头信息

nginx 转发请求头信息 让后台接口程序能获取到必要的请求头信息 # 转发host proxy_set_header Host $host; # 转发用户ip proxy_set_header X-Real-Ip $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_f...

docker 挂载实现容器配置更改为外部文件

docker安装镜像后,每个服务都是独立的容器,容器与容器之间可以说是没关系,隔离独立的。 而且虚拟出来的这些容器里面的基本安装工具都是没有的,比如vi,vim等等。需要使用,还得安装处理。 那么我们安装的容器后我们怎么去修改配置文件。比如nginx我们安装好了之后,而且安装在多个容器实现主从后,我们不可能每台服务器的配置文件都去修改一下,这样就太麻烦了。...

linux下安装nginx和配置

1、系统:centos6.8 2、安装准备: 安装nginx前,我们首先要确保系统安装了g++、gcc、openssl-devel、pcre-devel和zlib-devel软件,可通过如图所示命令进行检测,如果以安装我们可以通过图二所示卸载: yum install gcc-c++ yum -y install zlib zlib-devel open...