Nginx版本平滑升級方案


背景:由於負載均衡測試服務器中nginx版本過低,存在安全漏洞,查詢相關修復漏洞資料,需要采取nginx版本升級形式對漏洞進行修復。

Nginx平滑升級方案

1、案例采用版本介紹

舊版本 nginx-1.12.2.tar.gz
新版本 nginx-1.20.1.tar.gz

2、nginx-1.12.2版本為當前運行版本


設置端口8080和對主頁index.html進行修改,后續進行平滑升級后,依然可以對其訪問。

3、解壓新版本 nginx-1.20.1.tar.gz

編譯安裝至舊版本nginx-1.12.2目錄下,運行原有nginx.conf配置文件,執行如下:
./configure --prefix=/usr/local/nginx-1.12.2  --conf-path=/usr/local/nginx-1.12.2/nginx.conf --pid-path=/usr/local/nginx-1.12.2/nginx.pid --user=ngadm --group=ngadm --with-http_stub_status_module --without-http_rewrite_module 

make && make install

4、完成后1.20.1版本會自動在原sbin目錄下生產新的nginx二進制文件,舊的nginx會自動被替換成nginx.old

5、平滑升級

Nginx對進程的控制能力非常強大,可以通過信號指令控制進程。常用的信號有:
  • -QUIT,表處理完當前請求后,關閉進程。
  • -HUP,表示重新加載配置,也就是關閉原有的進程,並開啟新的工作進程。此操作不會中斷用戶的訪問請求,因此可以通過此信號平滑的重啟Nginx。
  • -USR2,用於平滑升級可執行程序。
  • -WINCH,從容關閉工作進程。
根據nginx進程控制信號,執行如下:
kill -USR2 38323(舊進程PID為38323)
ps -ef |grep nginx 

切換為新的master進程,關閉舊的work進程,注意此時舊的master進程依然存在,執行如下:
kill –WINCH 38323 (舊進程PID為38323)
ps -ef |grep nginx

檢查此時版本
sbin/nginx -v

已平滑升級成功。
注意:此時新版本nginx的masterPID為41063,同時也存在舊版本的master進程(舊進程PID為38323),若無需再回退時操作,可執行舊進程退出操作,執行如下:
kill –QUIT 38323 



回退步驟

關於回退操作分為兩類:

1、事前對舊版本nginx進行備份,若出現問題,直接將舊版本重新拷貝會/usr/local目錄下,重啟nginx舊版本操作,執行如下:

killall nginx
cp nginx-1.12.2.bak nginx-1.12.2
/usr/local/nginx-1.12.2/sbin/nginx –c /usr/local/nginx-1.12.2/nginx.conf

檢查nginx狀態
ps –ef |grep nginx

2、在新版本nginx的master進程和舊版本的master進程同時存在時,執行如下:

切換回舊版本的master進程
kill -HUP 舊masterPID

關閉新版本nginx的master進程,並將原sbin目錄下的nginx.old(舊版本nginx二進制文件)重新改回nginx,以便管理nginx。
kill -WINCH 新masterPID
kill -QUIT 新masterPID
cp /usr/local/nginx-1.12.2/sbin/nginx.old /usr/local/nginx-1.12.2/sbin/nginx

再次確認此時nginx版本已退回原版本
sbin/nginx -v


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM