1. 程式人生 > 其它 >nginx之平滑升級

nginx之平滑升級

準備軟體包並檢視舊版安裝配置

   [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