第三方支付平台因安全問題對nginx做了升級操作,為了不影響業務,整個操作過程都不能停服務,因此對升級方法做出了要求。以下為我整理的生產環境實際操作方法,已在第三方支付平台上成功應用,希望對即將或者可能涉及nginx升級操作的同事有所幫助。
Nginx升級步驟:
步驟一:查看原版本及已安裝模塊和進程號。
ps aux|grep nginx
/payment/nginx/sbin/nginx –V
步驟二:下載新版本安裝文件並上傳到nginx主機目錄/payment/bak/。
下載地址http://nginx.org/download/nginx-1.4.3.tar.gz
步驟三:備份舊版本的執行程序。
tar -cvf /payment/bak/nginx.sbin.20140115.tar /payment/nginx/sbin/
步驟四:編譯新版本,增刪模塊。
tar zxvf /payment/bak/nginx-1.4.3.tar.gz
cd /payment/bak/nginx-1.4.3
./configure --prefix=/payment/nginx
make
make install
步驟五:替換。
kill -USR2 21727
ll /payment/nginx/logs/nginx*
ps aux|grep nginx
kill -WINCH 21727
一段時間之后,舊的工作進程(worker process)處理了所有已連擊的請求后推出,僅由新的工作進程(worker process)來處理請求了。
步驟六:決定使用新版本還是恢復到舊版本。
使用新版本:kill -QUIT 21727
新的主進程退出后,舊的主進程會移除.oldbin后綴,恢復為他的.pid文件,這樣,一切就都恢復為升級之前了。 如果嘗試升級成功,而自己又希望保留新版本時,可發送QUIT信號給舊的主進程,使其退出而只留下新的進程運行:kill -QUIT 舊主進程號。
為了能夠更加安全,往往采用隱藏軟件版本號的方法,此處插入步驟七,對版本號進行隱藏。
步驟七:備份配置文件並隱藏版本號
(1)備份:tar -cvf /payment/bak/nginx.conf.20140115.tar /payment/nginx/conf/
(2)vi /payment/nginx/conf/nginx.conf
http中加入:
server_tokens off;
vi /payment/nginx/conf/fastcgi.conf
修改:
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
為
fastcgi_param SERVER_SOFTWARE nginx;
(3)重新加載配置文件。
./nginx -s reload
驗證:curl --head 127.0.0.1