1. 程式人生 > >Nginx之熱部署

Nginx之熱部署

使用 run ble gzip logs 1.12.2 cal -h 特點

nginx 作為一個反向代理、負載均衡服務器,必須具備高可用的特點,因此 nginx 支持熱部署。
nginx 的熱部署和其並發模型有著密不可分的關系。說白了,就是因為 master 進程的關系。當通知 ngnix 重讀配置文件的時候,master 進程會進行語法錯誤的判斷。如果存在語法錯誤的話,返回錯誤,不進行裝載;如果配置文件沒有語法錯誤,那麽 ngnix 也不會將新的配置調整到所有 worker 中。而是,先不改變已經建立連接的 worker,等待 worker 將所有請求結束之後,將原先在舊的配置下啟動的 worker 殺死,然後使用新的配置創建新的 worker。
Nginx 作為一個服務器,我們不可能把服務停了在進行配置升級、軟件版本升級吧。所以,Nginx 的熱部署就極大的方便了我們對服務器軟件的升級維護。

1、獲取原nginx的安裝目錄

whereis nginx

2、查看原nginx版本,並獲取原nginx的編譯參數

cd /usr/local/nginx

./sbin/nginx -V         #大寫V

nginx version: nginx/1.12.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-18) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-openssl=/opt/openssl-1.0.2r --with-stream --with-stream_ssl_module

3、到官網下載最新版本的nginx (下載地址:http://nginx.org/en/download.html)

cd /opt 

wget http://nginx.org/download/nginx-1.15.0.tar.gz

4、編譯新版nginx-1.15.0(註意:/opt/openssl-1.0.2r 提前下載並解壓好)

tar xf nginx-1.15.0.tar.gz

cd nginx-1.15.0

.configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_realip_module --with-openssl=/opt/openssl-1.0.2r --with-stream --with-stream_ssl_module

make         # 這裏只編譯不安裝,不要執行make install 命令,編譯後的nginx文件在/objs/目錄下

5、備份舊版本的nginx的執行程序

mv /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.old

6、替換舊的Nginx的執行程序

cp -a /opt/nginx-1.15.0/objs/nginx /usr/local/nginx/sbin/

7、發送USR2信號給舊版本主進程號,使nginx的舊版本停止接收請求,用nginx新版本接替,且老進程處理完所有請求,關閉所有連接後,停止

kill -USR2 cat /var/run/nginx/nginx.pid

8、查看nginx pid目錄,多了個nginx.pid.oldbin文件,存放了舊版本nginx的pid號

ls -l  /usr/local/nginx/logs/

...
nginx.pid
nginx.pid.oldbin
...

9、從容關閉舊進程

kill -QUIT cat /var/run/nginx/nginx.pid.oldbin

10、查看升級後的版本

./usr/local/nginx/sbin/nginx -v              #小寫v

nginx version: nginx/1.15.0

至此,nginx熱部署完成了。

Nginx之熱部署