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

Nginx平滑升级方案

1、案例采用版本介绍

旧版本 nginx-1.12.2.tar.gz

新版本 nginx-1.20.1.tar.gz

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



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

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

5、平滑升级

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

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

检查此时版本
sbin/nginx -v

已平滑升级成功。
注意:此时新版本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的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版本已退回原版本
sbin/nginx -v

Nginx版本平滑升级方案的更多相关文章

  1. 源码安装nginx以及平滑升级

                                                           源码安装nginx以及平滑升级                               ...

  2. Nginx1.8.0版本平滑升级新版本1.9.7

    原文:http://www.jb51.net/article/79878.htm 首先查看现在环境nginx的版本为1.8.0 编译的参数只指定了安装路径: 复制代码代码如下: [root@local ...

  3. nginx的平滑升级

    一:解释nginx的平滑升级 随着nginx越来越流行,并且nginx的优势也越来越明显,nginx的版本迭代也来时加速模式,1.9.0版本的nginx更新了许多新功能,例如stream四层代理功能, ...

  4. nginx的平滑升级,不间断服务

    nginx的平滑升级,不间断服务   Nginx更新真的很快,最近nginx的1.0.5稳定版,nginx的0.8.55和nginx的0.7.69旧的稳定版本已经发布.我一项比较喜欢使用新版本的软件, ...

  5. 对nginx进行平滑升级

    1.查看服务器当前nginx版本 [root@instance-hwl9ix5l licenses]# nginx -v           #查看版本 nginx: nginx version: n ...

  6. nginx不间断服务平滑升级

    (1)备份旧的nginx和配置文件 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/bak_nginx #备份旧版程序 cp /usr/loc ...

  7. Nginx的平滑升级记录---适用于编译安装的Nginx

    一.查看自己的Nginx的版本号 [root@localhost sbin]# cd /usr/local/nginx/sbin/ [root@localhost sbin]# ls nginx [r ...

  8. Kakfa集群(2.11-0.10.1.0)版本滚动升级方案

    Kafka集群版本升级(2.11-0.10.1.0)升级(2.11-0.10.2.2) 官网升级说明: 一.系统环境Zookeeper集群:172.16.2.10172.16.2.11172.16.2 ...

  9. nginx版本无缝升级与回滚

    chookie和session 你们公司的会话保持怎么做的? 1.开发做的:记录用户登陆的状态,将用户登陆状态保存到,redis服务器中,nfs,mysql. ​ 记录用户的登陆状态. ​ 通过登陆用 ...

随机推荐

  1. GlassFish 任意文件读取漏洞

    poc https://192.168.49.2:4848/theme/META-INF/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0%ae%c0%ae/%c0 ...

  2. Gitea 1.4.0 目录穿越导致命令执行漏洞

    复现 POST /vulhub/repo.git/info/lfs/objects HTTP/1.1 Host: 192.168.49.2:3000 Accept-Encoding: gzip, de ...

  3. 在阿里云上单机部署k8s1.18

    系统:CentOS Linux release 8.1.1911 配置主机名 [root@iZwz9e3t4tj14jzewdtvj8Z ~]# hostnamectl set-hostname la ...

  4. C++ 继承方式 //语法:class 子类 :继承方式 父类 //继承方式 三种: //1.公共继承 //2.保护继承 //3.私有继承

    1 //继承方式 2 //语法:class 子类 :继承方式 父类 3 //继承方式 三种: 4 //1.公共继承 5 //2.保护继承 6 //3.私有继承 7 8 #include <ios ...

  5. 用 区间判断(if)来猜价格的高低

    1 #include <stdio.h> 2 #include <stdlib.h> 3 int main() 4 { 5 int price = 150; 6 int gue ...

  6. python之(mysql数据库操作)

    前言:关心3步骤(此文章只针对python自动化根基展开描述) 什么是mysql数据库操作?  答:利用python对mysql数据库进行增, 删, 改, 查 操作 为什么要用python对mysql ...

  7. JAVA的一般输入输出 和 快速输入输出 (BufferedReader&BufferedWrite)(转载)

    1.JAVA的一般输入输出 和 快速输入输出 (BufferedReader&BufferedWrite) 摘要 本文主要介绍快速输入输出, 文中提到了几个IO类,这里推荐使用Buffered ...

  8. 【笔记】随机森林和Extra-Trees

    随机森林和Extra-Trees 随机森林 先前说了bagging的方法,其中使用的算法都是决策树算法,对于这样的模型,因为具有很多棵树,而且具备了随机性,那么就可以称为随机森林 在sklearn中封 ...

  9. AttributeError: module 'numpy' has no attribute 'num'

    AttributeError: module 'numpy' has no attribute 'num' 写在前面 总的来说,先看看自己用的计算方式是不是写对了先,多个一起使用的话记得都看看 通过想 ...

  10. 手把手和你一起实现一个Web框架实战——EzWeb框架(四)[Go语言笔记]Go项目实战

    手把手和你一起实现一个Web框架实战--EzWeb框架(四)[Go语言笔记]Go项目实战 代码仓库: github gitee 中文注释,非常详尽,可以配合食用 这一篇文章主要实现路由组功能.实现路由 ...