nginx在使用過程中,有時需要在不影響當前業務的情況下,進行升級或新增模塊。nginx的升級有兩種方法:1.半自動化升級;2.手動升級
不過都需要先查看安裝的nginx版本和配置信息,然后前往官網下載所需的版本,並上傳
[root@youxi1 ~]# nginx -V nginx version: nginx/1.14.1 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) configure arguments: --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx --group=nginx
下載地址:http://nginx.org/en/download.html
一、半自動化升級
半自動化升級,其實就是在最后遷移的時候不使用make install,而使用源碼自帶的升級命令make upgrade來自動完成。
(1).解壓文件,並編譯(只編譯不安裝)
只編譯不安裝。./configure后面的參數可以保持一致,也可以改動;另外我這里指定了--with-pcre,需要保證后面的參數存在。
[root@youxi1 ~]# tar zxf nginx-1.16.0.tar.gz -C /usr/local/src/ [root@youxi1 ~]# cd /usr/local/src/nginx-1.16.0/ [root@youxi1 nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx --group=nginx [root@youxi1 nginx-1.16.0]# make -j 4 //這里指定的是CPU內核數量,加快編譯速度 [root@youxi1 nginx-1.16.0]# echo $? 0
(2).備份舊的二進制文件,復制新的二進制文件到nginx目錄
[root@youxi1 nginx-1.16.0]# mv /usr/local/nginx/sbin/nginx{,.old} //備份 [root@youxi1 nginx-1.16.0]# cp objs/nginx /usr/local/nginx/sbin/ //復制
(3).執行升級語句
[root@youxi1 nginx-1.16.0]# make upgrade /usr/local/nginx/sbin/nginx -t //查看配置文件是否正確,這里使用的是剛復制過來的nginx二進制文件 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` //發送平滑遷移信號給舊的nginx進程 sleep 1 //等待1秒 test -f /usr/local/nginx/logs/nginx.pid.oldbin //檢測舊的nginx.pid進程是否變為nginx.pid.oldbin kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin` //結束工作進程,完成此次升級
test -f [文件]如果為一個普通文件,則為真。這里用來判斷文件是否存在。
手動升級其實就是使用打印出來的這些語句,加上kill –WINCH `cat /usr/local/nginx/log/nginx.pid.oldbin`(從容關閉nginx.pid.oldbin)和kill –HUP `cat /url/local/nginx/log/nginx.pid.oldbin`(不重啟舊的nginx進程)。
(4).檢測是否升級成功
首先看看是否正在運行
[root@youxi1 nginx-1.16.0]# ps aux | grep nginx //查看是否正常運行,如果之前就能使用systemctl,也可以使用systemctl查看 nginx 1338 0.0 0.1 216972 6244 ? S 13:08 0:00 php-fpm: pool www nginx 1340 0.0 0.1 216972 6244 ? S 13:08 0:00 php-fpm: pool www root 7556 0.0 0.0 18252 1728 ? S 17:05 0:00 nginx: master process /usr/local/nginx/sbin/nginx nginx 7557 0.0 0.0 18624 1360 ? S 17:05 0:00 nginx: worker process root 7563 0.0 0.0 112724 988 pts/0 S+ 17:06 0:00 grep --color=auto nginx
接着看看配置文件是否有錯,還有nginx的版本和配置選項信息。我能直接使用nginx是因為配置了環境變量。
[root@youxi1 nginx-1.16.0]# nginx -t //查看配置文件是否有錯 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@youxi1 nginx-1.16.0]# nginx -V //查看版本和配置選項信息 nginx version: nginx/1.16.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) configure arguments: --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx --group=nginx
最后使用Windows查看
二、手動升級
手動升級和半自動化升級大同小異,只是在執行升級語句時,手動輸入打印的命令
(1).解壓文件並編譯
只編譯不安裝。./configure后面的參數可以保持一致,也可以改動;另外我這里指定了--with-pcre,需要保證后面的參數存在。
[root@youxi1 ~]# tar zxf nginx-1.16.0.tar.gz -C /usr/local/src/ [root@youxi1 ~]# cd /usr/local/src/nginx-1.16.0/ [root@youxi1 nginx-1.16.0]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx --group=nginx [root@youxi1 nginx-1.16.0]# make -j 4 //這里指定的是CPU內核數量,加快編譯速度 [root@youxi1 nginx-1.16.0]# echo $? 0
(2).備份舊的二進制文件,復制新的二進制文件到nginx目錄
[root@youxi1 nginx-1.16.0]# mv /usr/local/nginx/sbin/nginx{,.old} //備份 [root@youxi1 nginx-1.16.0]# ls /usr/local/nginx/sbin/ nginx.old [root@youxi1 nginx-1.16.0]# cp objs/nginx /usr/local/nginx/sbin/ //復制 [root@youxi1 nginx-1.16.0]# ls /usr/local/nginx/sbin/ nginx nginx.old
(3).執行取代make upgrade的命令
注意:這里的nginx.pid(nginx進程文件)所在地址不是固定的,需要查看nginx目錄下的conf/nginx.conf配置文件
[root@youxi1 nginx-1.16.0]# /usr/local/nginx/sbin/nginx -t //查看配置文件是否正確,這里使用的是剛復制過來的nginx二進制文件 nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@youxi1 nginx-1.16.0]# kill -USR2 `cat /usr/local/nginx/logs/nginx.pid` //發送平滑遷移信號給舊的nginx [root@youxi1 nginx-1.16.0]# test -f /usr/local/nginx/logs/nginx.pid.oldbin //我們判斷是否平滑遷移到nginx.pid.oldbin,test -f與echo $?的組合 [root@youxi1 nginx-1.16.0]# echo $? 0 [root@youxi1 nginx-1.16.0]# ls /usr/local/nginx/logs/nginx.pid* //判斷是否平滑遷移也可以ls命令查看是否存在nginx.pid.oldbin文件 /usr/local/nginx/logs/nginx.pid /usr/local/nginx/logs/nginx.pid.oldbin [root@youxi1 nginx-1.16.0]# kill -WINCH `cat /usr/local/nginx/logs/nginx.pid.oldbin` //從容關閉nginx進程 [root@youxi1 nginx-1.16.0]# kill -HUP `cat /usr/local/nginx/logs/nginx.pid.oldbin` //不重啟舊的nginx進程 [root@youxi1 nginx-1.16.0]# kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin` //結束工作進程,完成此次升級
test -f [文件]和echo $?組合判斷平滑遷移,與直接ls [文件]判斷平滑遷移只要使用一個就可以了。
(4).檢測是否升級成功
首先看看是否正在運行
[root@youxi1 nginx-1.16.0]# ps aux | grep nginx nginx 1307 0.0 0.1 216972 6244 ? S 10:34 0:00 php-fpm: pool www nginx 1308 0.0 0.1 216972 6244 ? S 10:34 0:00 php-fpm: pool www root 7476 0.0 0.0 18252 1728 ? S 10:45 0:00 nginx: master process /usr/local/nginx/sbin/nginx nginx 7477 0.0 0.0 18624 1360 ? S 10:45 0:00 nginx: worker process nginx 7493 0.0 0.0 18600 1344 ? S 10:47 0:00 nginx: worker process root 7571 0.0 0.0 112724 988 pts/0 S+ 11:08 0:00 grep --color=auto nginx
接着看看配置文件是否有錯,還有nginx的版本和配置選項信息。我能直接使用nginx是因為配置了環境變量。
[root@youxi1 nginx-1.16.0]# nginx -V nginx version: nginx/1.16.0 built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) configure arguments: --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx --group=nginx
最后使用Windows查看
參考:https://blog.csdn.net/xiaolong20081/article/details/82871878