Nginx的在线升级不需要停服务

1.我们要准备好升级的Nginx软件包,解压;

[root@sxb-1 Nginx]# tar xf nginx-1.13.4.tar

2.备份好原先的Nginx数据;

[root@sxb-1 Nginx]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

[root@sxb-1 Nginx]# ls /usr/local/nginx/sbin/nginx.bak
/usr/local/nginx/sbin/nginx.bak

3.对解压Nginx目录进行配置,在目录里会出现先objs目录;编译 make;

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-http_dav_module --with-pcre=../pcre-8.40

Nginx-在线升级、降级

4.将我们编译好的数据copy到Nginx目录去;

[root@sxb-1 nginx-1.13.4]# cp objs/nginx /usr/local/nginx/sbin/

5.查看版本号

[root@sxb-1 sbin]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.13.4

到这里我们在硬盘上的升级就完成了,接下来我们要替换内存中的Nginx数据;

这里有两种方法;

第一种为 make upgrade;

第二种;

我们要先查看一下Nginx进程号

[root@sxb-1 sbin]# ps -ef | grep nginx
root      25451      1  0 04:45 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     25452  25451  0 04:45 ?        00:00:00 nginx: worker process
root      33976  19429  0 05:15 pts/3    00:00:00 grep --color=auto nginx

1.把我们的新版本加进来

[root@sxb-1 sbin]# kill -USR2 25451
[root@sxb-1 sbin]# ps -ef | grep nginx
root      25451      1  0 04:45 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     25452  25451  0 04:45 ?        00:00:00 nginx: worker process
root      33977  25451  0 05:19 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     33978  33977  0 05:19 ?        00:00:00 nginx: worker process
root      33980  19429  0 05:19 pts/3    00:00:00 grep --color=auto nginx

我们可以看到,出现了两个Nginx进程(bin/nginx为子进程)

2.命令旧本nginx剩余任务完成后,不再接新的任务;

[root@sxb-1 sbin]# kill -WINCH 25451
[root@sxb-1 sbin]# ps -ef | grep nginx
root      25451      1  0 04:45 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
root      33977  25451  0 05:19 ?        00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nginx     33978  33977  0 05:19 ?        00:00:00 nginx: worker process
root      33987  19429  0 05:22 pts/3    00:00:00 grep --color=auto nginx

旧版本nginx不再产生子进程接任务;这里我们一般会把旧版本放置一段时间,以防新版本出现问题;

3.将旧版本nginx清除掉;

[root@vlnx251101 ~]# kill -QUIT 25451

这样升级任务就完成了

=================================================================================================

降级操作:

1.将我们备份的nginx.bak恢复到/usr/local/nginx/sbin 目录下;

2.重复上面的操作;