千家信息网

Nginx版本如何实现平滑升级与回滚

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家分享的是有关Nginx版本如何实现平滑升级与回滚的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、环境介绍今天准备的两个nginx版本如下:[root@ngi
千家信息网最后更新 2026年11月03日Nginx版本如何实现平滑升级与回滚

这篇文章给大家分享的是有关Nginx版本如何实现平滑升级与回滚的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

1、环境介绍

今天准备的两个nginx版本如下:

[root@nginx ~]# cd /download/nginx/[root@nginx nginx]# lltotal 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:58 nginx-1.14.2.tar.gz

2、编译安装新旧版本

编译安装nginx-1.12.2

[root@nginx nginx]# tar zxf nginx-1.12.2.tar.gz [root@nginx nginx]# cd nginx-1.12.2[root@nginx nginx-1.12.2]# ./configure --prefix=/usr/local/nginx-1.12.2[root@nginx nginx-1.12.2]# echo $?0[root@nginx nginx-1.12.2]# make && make install[root@nginx nginx-1.12.2]# echo $?0[root@nginx nginx-1.12.2]# ll /usr/local/nginx-1.12.2/total 0drwxr-xr-x 2 root root 333 Mar 1 09:01 confdrwxr-xr-x 2 root root 40 Mar 1 09:01 htmldrwxr-xr-x 2 root root  6 Mar 1 09:01 logsdrwxr-xr-x 2 root root 19 Mar 1 09:01 sbin

编译安装nginx-1.14.2

[root@nginx ~]# cd /download/nginx/[root@nginx nginx]# tar zxf nginx-1.14.2.tar.gz [root@nginx nginx]# cd nginx-1.14.2[root@nginx nginx-1.14.2]# ./configure --prefix=/usr/local/nginx-1.14.2[root@nginx nginx-1.14.2]# echo $?0[root@nginx nginx-1.14.2]# make && make install[root@nginx nginx-1.14.2]# echo $?0[root@nginx nginx-1.14.2]# ls -l /usr/local/nginx-1.14.2/total 0drwxr-xr-x 2 root root 333 Mar 1 09:03 confdrwxr-xr-x 2 root root 40 Mar 1 09:03 htmldrwxr-xr-x 2 root root  6 Mar 1 09:03 logsdrwxr-xr-x 2 root root 19 Mar 1 09:03 sbin

到这里,两个版本的nginx软件已经部署完成。

3、启动旧版本nginx

[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -tnginx: the configuration file /usr/local/nginx-1.12.2/conf/nginx.conf syntax is oknginx: configuration file /usr/local/nginx-1.12.2/conf/nginx.conf test is successful[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx[root@nginx ~]# ps -ef|grep nginxroot    6324   1 0 09:06 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6325  6324 0 09:06 ?    00:00:00 nginx: worker processroot    6327  1244 0 09:06 pts/0  00:00:00 grep --color=auto nginx[root@nginx ~]# lsof -i :80COMMAND PID  USER  FD  TYPE DEVICE SIZE/OFF NODE NAMEnginx  6324  root  6u IPv4 26324   0t0 TCP *:http (LISTEN)nginx  6325 nobody  6u IPv4 26324   0t0 TCP *:http (LISTEN)

4、升级到新版本

版本升级其实就是针对二进制文件的升级,过程如下:

[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -vnginx version: nginx/1.12.2[root@nginx ~]# cd /usr/local/nginx-1.12.2/sbin/[root@nginx sbin]# mv nginx nginx-1.12.2#首先备份原来的旧版本nginx二进制文件[root@nginx sbin]# cp /usr/local/nginx-1.14.2/sbin/nginx ./#拷贝新版本的二进制文件到当前目录

接下来进行平滑升级操作

[root@nginx ~]# ps -ef|grep nginxroot    6324   1 0 09:06 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6325  6324 0 09:06 ?    00:00:00 nginx: worker processroot    6338  1244 0 09:11 pts/0  00:00:00 grep --color=auto nginx[root@nginx ~]# kill -USR2 6324[root@nginx ~]# ps -ef|grep nginxroot    6324   1 0 09:06 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6325  6324 0 09:06 ?    00:00:00 nginx: worker processroot    6340  6324 0 09:12 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6341  6340 0 09:12 ?    00:00:00 nginx: worker processroot    6343  1244 0 09:12 pts/0  00:00:00 grep --color=auto nginx

这时新的master进程已经正常开启,但老的work进程也存在,所以我们使用下面的命令,将老的work进程发出平滑停止的信号,如下:

[root@nginx ~]# kill -WINCH 6324[root@nginx ~]# ps -ef|grep nginxroot    6324   1 0 09:06 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxroot    6340  6324 0 09:12 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6341  6340 0 09:12 ?    00:00:00 nginx: worker processroot    6346  1244 0 09:14 pts/0  00:00:00 grep --color=auto nginx

此时,老的work进程已经停止,接下来我们测试是否能正常访问:

可以正常访问,其实这一平滑升级的动作,对访问用户来说是完全感知不到,所以nginx热部署就已经完成了。

[root@nginx ~]# /usr/local/nginx-1.12.2/sbin/nginx -vnginx version: nginx/1.14.2

查看版本也是最新的版本,升级完成。

注:如果在版本升级完成后,没有任何问题,需要关闭老的master进程的话,可以使用下面的命令:

kill -QUIT old_master_PID

5、版本回滚

对于升级来说,最难的不是升级,而是回滚,因为在实际生产环境回滚的机率是存在,比如:新版本由于某些未知bug导致与现有应用不兼容、或出现运行不稳定的情况等等。

所以,对运维工程师来说,故障回滚是重点。

在上面的结果中,我们也能看到老的master进程是一直存在,在没有手工关闭前,它是不会自已关闭的,这种设计是有好处的,好处就是为了升级新版本后,如果出现问题能及时快速的回滚到上一个稳定版本。

[root@nginx ~]# ps -ef|grep nginxroot    6324   1 0 09:06 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxroot    6340  6324 0 09:12 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6341  6340 0 09:12 ?    00:00:00 nginx: worker processroot    6350  1244 0 09:23 pts/0  00:00:00 grep --color=auto nginx[root@nginx ~]# cd /usr/local/nginx-1.12.2/sbin/[root@nginx sbin]# mv nginx nginx-1.14.2[root@nginx sbin]# mv nginx-1.12.2 nginx[root@nginx sbin]# kill -USR1 6324[root@nginx sbin]# ps -ef|grep nginxroot    6324   1 0 09:06 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxroot    6340  6324 0 09:12 ?    00:00:00 nginx: master process /usr/local/nginx-1.12.2/sbin/nginxnobody   6341  6340 0 09:12 ?    00:00:00 nginx: worker processroot    6355  1244 0 09:24 pts/0  00:00:00 grep --color=auto nginx[root@nginx sbin]# ./nginx -vnginx version: nginx/1.12.2

从上面的结果发现,已经平滑的回滚的上一个版本,接下来测试是否能正常访问:

一样可以正常访问,所以,这个回滚的操作对用户来说也是不可感知的。

感谢各位的阅读!关于"Nginx版本如何实现平滑升级与回滚"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

版本 升级 进程 平滑 面的 接下来 二进制 文件 编译 两个 内容 命令 好处 就是 更多 环境 用户 篇文章 结果 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手冲咖啡和咖啡机区别 互联网科技公司排名 狮子座互联网科技有限公司 融势互联网科技 互联网科技公司有哪些 新华互联网科技校企合作 宁波青枫互联网科技有限公司 互联网科技教育视频 恒生互联网科技指数跳水 国大互联网教育科技有限公司工作 皮皮虾互联网科技有限公司 美国互联网科技公司 四川互联网展示科技馆设计 浙南科技城互联网大厦招聘 昆明中奇联合互联网科技 保山浩联互联网科技有限公司 青岛互联网科技园 东风日产互联网科技公司叫什么 宁波允成互联网科技有限公司 互联网 科技节活动 微视频大赛 未来的互联网科技 菲比寻常互联网科技 大白互联网科技 人人互联网科技是培训 卫星互联网科技股票 玖二柒互联网科技公司待遇 河南猎农互联网科技有限公司 佛山市翊博互联网络科技有限公司 工业互联网山东科技大学 2021世界互联网领先科技成果发布
0