Nginx 平滑升级与回滚
时间:2022-07-27
本文章向大家介绍Nginx 平滑升级与回滚,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
环境
首先准备两个版本不一样Nginx
https://nginx.org/download/nginx-1.18.0.tar.gz
https://nginx.org/download/nginx-1.14.2.tar.gz
下载Nginx
[root@localhost down]# https://nginx.org/download/nginx-1.18.0.tar.gz
[root@localhost down]# https://nginx.org/download/nginx-1.14.2.tar.gz
[root@localhost down]# ll
总用量 2008
-rw-r--r--. 1 root root 1015384 12月 4 2018 nginx-1.14.2.tar.gz
-rw-r--r--. 1 root root 1039530 4月 21 22:33 nginx-1.18.0.tar.gz
安装依赖包
yum install -y wget gcc gcc-c++ make pcre pcre-deve zilib zlib-devel openssl-devel
编译安装旧版本Nginx
tar zxf nginx-1.14.2.tar.gz
cd nginx-1.14.2
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module
make && make install
编译新版本Nginx
tar zxf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module
make #千万不要输入make install命令,否则会覆盖
Nginx 平滑升级
启动旧版本Nginx
/usr/local/nginx/sbin/nginx
备份旧版本Nginx二进制文件
[root@localhost /]# cd /usr/local/nginx/sbin/
[root@localhost sbin]# cp nginx{,.bak}
[root@localhost sbin]# ls
nginx nginx.bak
#复制新版本二进制文件到当前目录
[root@localhost sbin]# cp /down/nginx-1.18.0/objs/nginx ./nginx
发送USR2信号
[root@localhost sbin]# ps -ef|grep nginx
root 21951 1 0 00:30 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody 21952 21951 0 00:30 ? 00:00:00 nginx: worker process
root 21954 1436 0 00:30 pts/1 00:00:00 grep --color=auto nginx
#向主进程master发送USR2信号,Nginx会启动一个新版本的master进程和对应工作进程,和旧版一起处理请求
[root@localhost sbin]# kill -USR2 21951
[root@localhost sbin]# ps -ef|grep nginx
root 21951 1 0 00:30 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody 21952 21951 0 00:30 ? 00:00:00 nginx: worker process
root 21961 21951 0 00:31 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody 21962 21961 0 00:31 ? 00:00:00 nginx: worker process
root 21964 1436 0 00:31 pts/1 00:00:00 grep --color=auto nginx
发送WINCH信号
#向旧的Nginx主进程master发送WINCH信号,它会逐步关闭自己的工作进程(主进程不退出),这时所有请求都会由新版Nginx处理
[root@localhost sbin]# kill -WINCH 21951
[root@localhost sbin]# ps -ef|grep nginx
root 21951 1 0 00:30 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
root 21961 21951 0 00:31 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody 21962 21961 0 00:31 ? 00:00:00 nginx: worker process
root 21993 1436 0 00:41 pts/1 00:00:00 grep --color=auto nginx
[root@localhost sbin]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.18.0
Date: Sat, 10 Oct 2020 16:43:13 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sat, 10 Oct 2020 16:28:21 GMT
Connection: keep-alive
ETag: "5f81e125-264"
Accept-Ranges: bytes
版本回滚
#如果这时需要回退继续使用旧版本,可向旧的Nginx主进程发送HUP信号,它会重新启动工作进程,仍使用旧版配置文件,然后可以将新版Nginx进程杀死
[root@localhost sbin]# kill -HUP 21951
[root@localhost sbin]# curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sat, 10 Oct 2020 16:53:22 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Sat, 10 Oct 2020 16:28:21 GMT
Connection: keep-alive
ETag: "5f81e125-264"
Accept-Ranges: bytes
- 【LeetCode 500】关关的刷题日记27 Keyboard Row
- 1601: [Usaco2008 Oct]灌水
- 1657: [Usaco2006 Mar]Mooo 奶牛的歌声
- 1610: [Usaco2008 Feb]Line连线游戏
- 1012: [JSOI2008]最大数maxnumber
- 1430: 小猴打架
- 1202: [HNOI2005]狡猾的商人
- 1059: [ZJOI2007]矩阵游戏
- 3039: 玉蟾宫
- 大公司都有哪些开源项目之腾讯
- Vue拖拽组件开发实例
- 一小时培训之神经网络入门
- 【LeetCode 290】 关关的刷题日记28 Word Pattern
- Redis知识点速查
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP让网站移动访问更加友好方法
- python代码区分大小写吗
- php面试中关于面向对象的相关问题
- python实现在线翻译
- Python字符串格式化常用手段及注意事项
- PHP count_chars()函数讲解
- 浅谈keras使用中val_acc和acc值不同步的思考
- PHP安装BCMath扩展的方法
- keras实现多GPU或指定GPU的使用介绍
- 浅谈keras中的keras.utils.to_categorical用法
- python 使用多线程创建一个Buffer缓存器的实现思路
- keras.utils.to_categorical和one hot格式解析
- Python OpenCV读取中文路径图像的方法
- Java如何基于wsimport调用wcf接口
- Python装饰器结合递归原理解析