• 认识平滑升级

有时候我们需要对Nginx版本进行升级以满足运维人员对其功能的需求,例如添加xxx模块,需要xxx功能,而此时Nginx又在跑着业务无法停掉,这时我们就只能平滑升级了。

  • 平滑升级原理

Nginx服务接收到USR2信号后,将Nginx.pid文件添加.oldbin变成nginx.pid.oldbin文件;然后执行新版本Nginx服务器的二进制文件启动服务,如果新的服务启动成功,系统中将有新旧两个Nginx主进程共同提供Web服务,之后,需要向旧的Nginx服务进程发送WINCH信号,使旧的Nginx服务平滑停止,并删除Nginx.pid.oldbin文件。

  • Nginx信号简介

1.主进程支持的信号
2.TERM, INT: 立刻退出
3.QUIT: 等待工作进程结束后再退出
4.KILL: 强制终止进程
5.HUP: 重新加载配置文件,使用新的配置启动工作进程,并逐步关闭旧进程。
6.USR1: 重新打开日志文件
7.USR2: 启动新的主进程,实现热升级
8.WINCH: 逐步关闭工作进程
9.工作进程支持的信号
10.TERM, INT: 立刻退出
11.QUIT: 等待请求处理结束后再退出
12.USR1: 重新打开日志文件

  • 进行平滑升级

1.当前环境

  1. System : CentOS-7.5
  2. Nginx :1.12.0

2.查看当前版本并下载新版本Nginx

  1. /usr/local/nginx/sbin/nginx -v
  2. # nginx version: nginx/1.12.0
  3. wget -c http://nginx.org/download/nginx-1.16.0.tar.gz
  4. # 下载的版本为nginx-1.16.0

3.开始平滑升级

  1. tar -xzf nginx-1.16.0.tar.gz
  2. # 解压源码包
  3. cd nginx-1.16.0
  4. ./configure --prefix=/usr/local/nginx/ --with-http_stub_status_module --with-http_ssl_module
  5. # 进入源码包内执行预编

预编译结果如上图所示,即可执行编译。。。

  1. make
  2. # 执行编译,切记不要安装也就是不要去执行 make install

对Nginx执行文件进行更新

  1. cd /usr/local/nginx/sbin
  2. # 进入nginx的执行文件目录内
  3. mv nginx nginx.old
  4. # 将旧版本Nignx执行文件备份为nginx.old
  5. cp /root/nginx-1.16.0/objs/nginx .
  6. # 将新版本Nginx执行文件移动到当前目录内

进行平滑重启

  1. /usr/local/nginx/sbin/nginx -t
  2. # 检测新版本Nginx是否正常 正常为 successful
  3. ps -ef|grep nginx
  4. # 查看旧版本nginx进程

  1. kill -USR2 4428
  2. # 向主进程发送USR2信号,Nginx会启动一个新版本的master进程和工作进程,和旧版一起处理请求

此时再次查看Nginx进程就发现有俩Nginx在工作

  1. kill -WITCH 4428
  2. # 向原Nginx主进程发送WINCH信号,它会逐步关闭旗下的工作进程(主进程不退出),这时所有请求都会由新版Nginx处理
  3. kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`
  4. # 杀死旧版本Nginx主进程或者 kill -9 2248 也可以
  5. /usr/local/nginx/sbin/nginx -v
  6. # ouput:nginx version: nginx/1.16.0
  • Nginx平滑升级结束

文章来源:https://www.113p.cn/287.html

Nginx平滑升级详细步骤-113p.cn的更多相关文章

  1. 让你的网站免费支持 HTTPS 及 Nginx 平滑升级

    为什么要使用 HTTPS ? 首先来说一下 HTTP 与 HTTPS 协议的区别吧,他们的根本区别就是 HTTPS 在 HTTP 协议的基础上加入了 SSL 层,在传输层对网络连接进行加密.简单点说在 ...

  2. Nginx 平滑升级、Nginx的一些基础配置

    # Nginx 平滑升级 # 方案一:使用Nginx服务信号进行升级 # 1.将就版本的sbin目录下可执行nginx进行备份(mv nginx nginxold) # 2.将新版本 configur ...

  3. Nginx range filter模块数字错误漏洞修复 (Nginx平滑升级) 【转】

    对线上生产环境服务器进行漏洞扫描, 发现有两台前置机器存在Nginx range filter模块数字错误漏洞, 当使用nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header ...

  4. Nginx range filter模块数字错误漏洞修复 (Nginx平滑升级)

    对线上生产环境服务器进行漏洞扫描, 发现有两台前置机器存在Nginx range filter模块数字错误漏洞, 当使用nginx标准模块时,攻击者可以通过发送包含恶意构造range域的header ...

  5. nginx平滑升级实战

    Nginx 平滑升级 1.查看旧版Nginx的编译参数 [root@master ~]# /usr/local/nginx/sbin/nginx -V [root@master ~]# ll ngin ...

  6. Nginx平滑升级版本!(重点)

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

  7. 02 . Nginx平滑升级和虚拟主机

    Nginx虚拟主机 在真实的服务器环境,为了充分利用服务器资源,一台nginx web服务器会同时配置N个虚拟主机,这样可以充分利用服务器的资源,方便管理员的统一管理 配置nginx虚拟主机有三种方法 ...

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

    转至:https://blog.csdn.net/midion9/article/details/49684325 一.平滑升级概述Nginx方便地帮助我们实现了平滑升级.其原理简单概括,就是:(1) ...

  9. Linux centos7 nginx 平滑升级

    2021-08-19为了方便读者的阅读,该文通篇使用绝对路径,各位朋友们在实际上操作中可以根据实际情况编写路径(#^.^#)1. 当前环境 # system cat /etc/redhat-relea ...

随机推荐

  1. C# Winform 学习(五)

    目标 1.MDI应用程序 2.图片框控件 3.图片集控件 4.定时器控件 一.MDI应用程序 1.理解: 单文档界面:SDI(word) 多文档界面:MDI(excel) 2.特点: 1)每个MDI程 ...

  2. PAT A+B和C

    题目描述 给定区间[-2的31次方, 2的31次方]内的3个整数A.B和C,请判断A+B是否大于C. 输入描述: 输入第1行给出正整数T(<=10),是测试用例的个数.随后给出T组测试用例,每组 ...

  3. Spring基本介绍

    一:Spring是什么 Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,它以IOC控制反转和AOP面向切面编程为核心,提供了展现层 Spring MVC 和持久层 ...

  4. thinkphp5升级thinkphp6完整步骤

    在php.ini文件中  打开  php_openssl扩展,去掉前面的;extension=php_openssl.dll 在phpstudy的WWW目录打开cmd,输入composer creat ...

  5. Linux命令总结大全,包含所有linux命令

    使用说明:此文档包含所有的Linux命令,只有你想不到的没有你看不到的,此文档共计10万余字,有8400多行,预计阅读时间差不多需要3个小时左右,所以要给大家说一说如何阅读此文档 为了方便大家阅读,我 ...

  6. Python中class的三种继承方法

    class parent(object): def implicit(self): print("Parent implicit()") def override(self): p ...

  7. jQuery实现购物车商品数量及总价的计算

    记录一下项目中遇到的计算购物车商品数量和总价的jQuery代码,重点在于选择器以及.text()命令的使用. 先上效果图,点击加减,商品数量以及总价会发生相应变化. html代码: <div c ...

  8. 宝塔部署时,出现“open_basedir restriction in effect”错误

    下面是错误代码: Warning: require(): open_basedir restriction in effect. Warning: require(XXXXXXXXXXX): fail ...

  9. (一)JDK安装和使用eclipse输出hello world

    目录 一.jdk安装(推荐使用压缩包安装) 二.使用eclipse输出hello world 一.jdk安装(推荐使用压缩包安装) 1.压缩包安装的优点:若可能同时使用多个jdk版本,切换jdk时只需 ...

  10. 在VisualStudio中为GUI程序添加console

    1.使用WINDOWS提供的一系列ReadConsole,WriteConsole等API来完成这个功能,具体参见MSDN HANDLE hOut = GetStdHandle(STD_OUTPUT_ ...