图文详解Nginx版本平滑升级方案

目录
  • 背景:
  • Nginx平滑升级方案
  • 回退步骤
  • 总结

背景:

由于负载均衡测试服务器中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版本平滑升级方案的文章就介绍到这了,更多相关Nginx版本平滑升级内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 详解nginx平滑升级的过程

    1.开始之前首先查看当前的使用版本以及编译时的参数: [root@www ~]# /usr/local/nginx/sbin/nginx -V nginx version: nginx/1.12.2 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC) built with OpenSSL 1.0.1e-fips 11 Feb 2013 TLS SNI support enabled configure arguments: --user=ww

  • 1分钟搞定Nginx版本的平滑升级与回滚的方法

    今天,我们来聊一聊,在企业实际生产环境中经常遇到的一个情况,升级Nginx到新的版本和如何回滚至旧版本. 1.环境介绍 今天准备的两个nginx版本如下: [root@nginx ~]# cd /download/nginx/ [root@nginx nginx]# ll total 1952 -rw-r--r-- 1 root root 981687 Oct 17 2017 nginx-1.12.2.tar.gz -rw-r--r-- 1 root root 1015384 Dec 4 09:

  • Nginx 启动、停止、重启、升级操作命令收集

    那下面主要总结一下Nginx的基本操作. 启动操作 命令: nginx -c /usr/nginx/conf/nginx.conf -c参数指定了要加载的nginx配置文件路径. 停止操作 停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文章)来进行的 步骤1:查询nginx主进程号 ps -ef | grep nginx 在进程列表里面找master进程,它的编号就是主进程号了. 步骤2:发送信号 从容停止Nginx: kill -QUIT 主进程号 快速停止Nginx: k

  • nginx 平滑重启与升级的实现方法

    如果改变了Nginx的配置文件(nginx.conf),想重启Nginx,同样可以通过发送系统信号给Nginx主进程的方式来进行.不过,重启之前,要确认Nginx配置文件(nginx.conf)的语法是正确的,否则Nginx将不会加载新的配置文件.通过以下命令可以判断Nginx配置文件是否正确: /usr/local/webserver/nginx/sbin/nginx    -t  -c/usr/local/webserver/nginx/conf/nginx.conf 如果配置文件不正确,屏

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

    首先查看现在环境nginx的版本为1.8.0 编译的参数只指定了安装路径: 复制代码 代码如下: [root@localhost sbin]# ./nginx -V nginx version: nginx/1.8.0 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC) configure arguments: --prefix=/usr/local/nginx 平滑升级步骤如下: 下载nginx1.9.7版本,解压并进入解压后的目录 复制代

  • Nginx平滑升级的详细操作方法

    一.平滑升级概述Nginx方便地帮助我们实现了平滑升级.其原理简单概括,就是:(1)在不停掉老进程的情况下,启动新进程.(2)老进程负责处理仍然没有处理完的请求,但不再接受处理请求.(3)新进程接受新请求.(4)老进程处理完所有请求,关闭所有连接后,停止.这样就很方便地实现了平滑升级.一般有两种情况下需要升级Nginx,一种是确实要升级Nginx的版本,另一种是要为Nginx添加新的模块.二..升级过程具体的操作也很简单,如下: (0)查看当前版本在存放Nginx的可执行文件的目录下输入: 复制

  • 图文详解Nginx版本平滑升级方案

    目录 背景: Nginx平滑升级方案 回退步骤 总结 背景: 由于负载均衡测试服务器中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

  • 图文详解nginx日志切割的实现

    目录 实现nginx的日志切割 面试题讨论: 总结 实现nginx的日志切割 (注:为什么要切割呢?因为当你用户访问量大的时候,可能日志也很大.) <1>:ll /usr/local/nginx/logs/  查看日志 (注:有两个日志,一个是访问日志,另一个是错误日志.) <2>:tail -f /usr/local/nginx/logs/access.log  查看访问日志 <3>:vim /opt/cut_nginx_log.sh  编写一个脚本 <4>

  • 图文详解Nginx多种匹配方式

    目录 前言 端口转发 利用访问地址转发 同一个server可以同时配置多个主机名 前置匹配 后置匹配 正则匹配 总结 前言 首先建立两个不同的路径的页面做测试 然后打开/usr/local/nginx/conf目录下的ngnix.conf 可以看到 每一个server都可以定义一个访问的转发到的路径 端口转发 server { listen 878;#当访问878端口组时 server_name localhost; #charset koi8-r; #access_log logs/host.

  • MySQL5.7.24版本的数据库安装过程图文详解

    MySQL 是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一. 一:MySQL安装包下载 打开网站去下载MySQL(MySQL下载地址链接) 这个网站链接进去是默认的最新版本的MySQL,所以假如需要下载5.7版本的,需要点击下面图上的链接进行下载. 选择对应你电脑的版本,现在一般都是64位的电脑. 接下来,点击Download,选择No thanks,

  • Android Studio3.6.3 当前最新版本数据库查找与导出方法(图文详解)

    一.SQLite安装包准备 本文章主要是针对安装了Android Studio 3.6.3 版本(Android Studio以下简称为AS)所做的SQLite教程, 博主这边安装的是 , 由于SQL语言基本大同小异,仅仅是管理数据库的软件不大相同,所以说数据库使用方法类似,具体安装流程参考网络上其他文章,本文暂不提供安装流程,安装完毕即可. 二.重中之重----Android Studio 3.0 版本起弃用了之前使用的ADM 博主也是刚发现自AS 3.0 开始弃用 Android Devic

  • Git恢复之前版本的两种方法reset、revert(图文详解)

    一.问题描述 在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset).反做(revert). 二.背景知识 git的版本管理,及HEAD的理解 使用git的每次提交,Git都会自动把它们串成一条时间线,这条时间线就是一个分支.如果没有新建分支,那么只有一条时间线,即只有一个分支,在Git里,这个分支叫主分支,即master分支.有一个HEAD指针指向当前分支(只有一个分支的情况下

  • Microsoft Sql server2005的安装步骤图文详解及常见问题解决方案

    一:安装sql server 2005过程中出现如下问题:"选择的功能中没有任何功能可以安装或升级": 解决方案:Microsoft SQL Server 2005→配置工具→SQL配置管理器→SQL Server 2005服务→右边的两个服务启动SQL Server FullTest Search() 和服务SQl Sever(计算机名) 二:无法将数CLSID写入\Software\Classes\PROTOCOLS\Handler\ms-help. 解决办法:退出电脑安全软件 三

  • SQL Server 2016 Alwayson新增功能图文详解

    概述 SQLServer2016发布版本到现在已有一年多的时间了,目前最新的稳定版本是SP1版本.接下来就开看看2016在Alwyson上做了哪些改进,记得之前我在写2014Alwayson的时候提到过几个需要改进的问题在2016上已经做了改进. 一.自动故障转移副本数量 在2016之前的版本自动故障转移副本最多只能配置2个副本,在2016上变成了3个. 说明:自动故障转移增加到三个副本影响并不是很大不是非常的重要,多增加一个故障转移副本也意味着你的作业也需要多维护一个副本.重要程度(一般).

  • mysql-8.0.15-winx64 解压版安装教程图文详解

    1.官网下载,并解压 https://dev.mysql.com/downloads/mysql/ 2.设置环境变量 配置MYSQL_HOME为MySQL的解压路径,并在path设置;%MYSQL_HOME%\bin 3.在MySQL解压路径下,新建my.ini 配置初始化参数: [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=D:

随机推荐