本篇文章简单介绍nginx的版本如何在线平滑升级。

本文举例nginx1.13.9升级到1.14.2版本,nginx主进程id是1533

更新nginx证书需要重启吗_nginx

更新nginx证书需要重启吗_更新nginx证书需要重启吗_02

1·备份


将当前的nginx安装目录备份一下,以防外一

cp -r nginx nginx_1.13.9


更新nginx证书需要重启吗_nginx_03

2·重新编译安装



记住要安装到当前nginx的安装目录中

2.1 升级版本

将新的nginx版本安装包,按照我另一个文章nginx-安装&启动&停止&平滑重启的步骤进行安装./configure  --prefix=/usr/local/nginx makemake install


2.2 添加、删除模块

在原先的版本的nginx安装包下,重新走一遍安装流程,在./configure  的时候选择需要编译的模块


2.3 安装完之后检查版本


安装完之后,检查 下版本,已经是1.14.2了

更新nginx证书需要重启吗_nginx_04

3·新旧并行


kill -USR2 1533(旧版本主进程id)旧版本nginx的主进程将重命名它的.pid文件为.oldbin(如下面截图)然后会执行新版本的nginx可执行程序,依次启动新版本的主进程和新的worker进程(如下面截图,4657就是新版本nginx的主进程)此时,新旧版本的nginx实例会同时运行,共同处理输入的请求。


更新nginx证书需要重启吗_nginx_05

4·停老版本nginx的worker进程


开始停老版本nginx的实例,发送WINCH信号给老版本nginx的进程,从容关闭老版本nginx的worker进程(主进程不关闭)kill -WINCH 1533(旧版本主进程id)一段时间之后,老版本的工作进程处理完自己所有已连接的请求后退出,由新版本的工作进程来处理输入的请求。下面截图可以看到。老版本nginx的worker进程已经都不在了,只剩主进程还在


更新nginx证书需要重启吗_nginx安装包_06

5·决定完成升级还是回退


此时,可以决定是使用新版本还是恢复到旧版本


5.1 完成升级,使用新版本

kill -QUIT 1533(旧版本主进程id)这样就只剩下新版本nginx的进程了,如下面截图


更新nginx证书需要重启吗_新版本_07

5.2 回退

kill -HUP 1533(旧版本主进程id)【旧版本nginx会在不重载配置文件情况下启动工作进程】kill -QUIT 4657 (新版本主进程id)【从容关闭新版本nginx的worker进程】kill -TERM 4657(新版本主进程id)【强制退出新版本的nginx】