首页 > 技术文章 > nginx之平滑升级

xhbiu 2022-03-16 15:58 原文

准备软件包并查看旧版安装配置

   [root@nginx ~]# ls
   nginx-1.12.0.tar.gz  nginx-1.20.1.tar.gz

   [root@nginx ~]# nginx -V
   nginx version: nginx/1.12.0
   built by gcc 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC)
   configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

 

 安装新版nginx

  [root@nginx ~]# tar zxvf nginx-1.20.1.tar.gz -C /usr/local/

  [root@nginx ~]# cd /usr/local/nginx-1.20.1/

  [root@nginx nginx-1.20.1]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module

  [root@nginx nginx-1.20.1]# make     ##注意 这里只需要编译即可,就不用加 make install了,加了的话会把之前修改的文件覆盖掉,

比如:老版本配置好的 nginx.conf 文件。

  备份老的nginx二进制文件

  [root@nginx nginx-1.20.1]# mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

 

  [root@nginx ~]# cp /usr/local/nginx-1.20.1/objs/nginx /usr/local/nginx/sbin/     复制新版本二进制文件过去

  [root@nginx ~]# nginx -t

 

         ##可以看到此时nginx版本已经变成最新的了,但是还未结束

因为nginx的进程还是旧的。

   nginx主进程支持的信号

 

  使用信号实现热升级

  [root@nginx ~]# ps -ef | grep nginx

 

  [root@nginx ~]# kill -USR2 3679   ##向主进程(master)发送USR2信号,nginx会启动一个新版本的主进程和对应工作进程,跟

旧版的进程一起处理请求。

    ##可以看到此时有四个进程。

 

  [root@nginx ~]# kill -WINCH 3680   ##关闭老版本的worker进程

  [root@nginx ~]# kill -QUIT 3679    ##关闭老版本的master进程

  [root@nginx ~]# ps -ef | grep nginx

    

 

 

 

   

 

推荐阅读