目錄
- 背景:
- Nginx平滑升級方案
- 回退步驟
- 總結(jié)
背景:
由于負載均衡測試服務(wù)器中nginx版本過低,存在安全漏洞,查詢相關(guān)修復(fù)漏洞資料,需要采取nginx版本升級形式對漏洞進行修復(fù)。
Nginx平滑升級方案
1、案例采用版本介紹
舊版本 nginx-1.12.2.tar.gz
新版本 nginx-1.20.1.tar.gz
2、nginx-1.12.2版本為當(dāng)前運行版本
![](/d/20211016/fc8a6412f159166023237e75e1d16bed.gif)
![](/d/20211016/8db6dec9a91399d01223dbac8dd3b83d.gif)
設(shè)置端口8080和對主頁index.html進行修改,后續(xù)進行平滑升級后,依然可以對其訪問。
![](/d/20211016/ad563bb2e13162fbd37a1db8d9d0757f.gif)
3、解壓新版本 nginx-1.20.1.tar.gz編譯安裝至舊版本nginx-1.12.2目錄下,運行原有nginx.conf配置文件,執(zhí)行如下
./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目錄下生產(chǎn)新的nginx二進制文件,舊的nginx會自動被替換成nginx.old
![](http://img.jbzj.com/file_images/article/202109/2021090910560611.png)
5、平滑升級
Nginx對進程的控制能力非常強大,可以通過信號指令控制進程。常用的信號有:
- -QUIT,表處理完當(dāng)前請求后,關(guān)閉進程。
- -HUP,表示重新加載配置,也就是關(guān)閉原有的進程,并開啟新的工作進程。此操作不會中斷用戶的訪問請求,因此可以通過此信號平滑的重啟Nginx。
- -USR2,用于平滑升級可執(zhí)行程序。
- -WINCH,從容關(guān)閉工作進程。
根據(jù)nginx進程控制信號,執(zhí)行如下:
kill -USR2 38323(舊進程PID為38323)
ps -ef |grep nginx
![](/d/20211016/603f2bcd36292a2b0f5e29cb8b91e20e.gif)
切換為新的master進程,關(guān)閉舊的work進程,注意此時舊的master進程依然存在,執(zhí)行如下:
kill –WINCH 38323 (舊進程PID為38323)
ps -ef |grep nginx
![](/d/20211016/f8c52f6ed8a6324961bb227d7c9195d8.gif)
檢查此時版本
![](/d/20211016/22d7e6300db87476bee3e3486a72ae5f.gif)
已平滑升級成功。
注意:此時新版本nginx的masterPID為41063,同時也存在舊版本的master進程(舊進程PID為38323),若無需再回退時操作,可執(zhí)行舊進程退出操作,執(zhí)行如下:
回退步驟
關(guān)于回退操作分為兩類:
1、事前對舊版本nginx進行備份,若出現(xiàn)問題,直接將舊版本重新拷貝會/usr/local目錄下,重啟nginx舊版本操作,執(zhí)行如下:
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狀態(tài)
ps –ef |grep nginx
2、在新版本nginx的master進程和舊版本的master進程同時存在時,執(zhí)行如下:
切換回舊版本的master進程
![](/d/20211016/143916c1bd63ce91ac5297737fbf5b9b.gif)
關(guān)閉新版本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
![](/d/20211016/e608301a9e9bcb731b4a45b73468dbc3.gif)
再次確認此時nginx版本已退回原版本
![](/d/20211016/72d66a914f3554498391a5549bb03e74.gif)
總結(jié)
到此這篇關(guān)于Nginx版本平滑升級方案的文章就介紹到這了,更多相關(guān)Nginx版本平滑升級內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!