Nginx基本命令&不停機(jī)版本升級(jí)
Nginx基本命令&不停機(jī)版本升級(jí)
在上一篇文章【Linux】Ubuntu安裝Nginx(在線安裝&源碼編譯安裝)中,我們已經(jīng)通過(guò)源碼編譯安裝nginx,其nginx執(zhí)行文件的地址為:/usr/local/nginx
Nginx工作模型
我們先來(lái)看看nginx啟動(dòng)之后的進(jìn)程情況:
ps -ef|grep nginx # 輸出結(jié)果 root 1036 1 0 02:33 ? 00:00:00 nginx: master process ./nginx nobody 1037 1036 0 02:33 ? 00:00:00 nginx: worker process
可以看到,目前運(yùn)行的nginx存在一個(gè)master進(jìn)程和一個(gè)worker進(jìn)程,它們有著明確的分工:
- master進(jìn)程:讀取和評(píng)估配置。
- worker進(jìn)程:處理請(qǐng)求,工作進(jìn)程的數(shù)量可以在配置文件中定義。
nginx采用基于事件的模型并依賴于操作系統(tǒng)的機(jī)制高效地在工作進(jìn)程之間分發(fā)請(qǐng)求。
Nginx基本命令
nginx命令
一般所有的軟件,都有類似于help的指令,nginx中我們使用nginx -h或者nginx -?即可進(jìn)行查看。
# 先進(jìn)入nginx執(zhí)行文件目錄 cd /usr/local/nginx # ./nginx -h Options: -?,-h : this help -v : show version and exit -V : show version and configure options then exit -t : test configuration and exit -T : test configuration, dump it and exit -q : suppress non-error messages during configuration testing -s signal : send signal to a master process: stop, quit, reopen, reload -p prefix : set prefix path (default: /usr/local/nginx/) -c filename : set configuration file (default: /usr/local/nginx/nginx.conf) -g directives : set global directives out of configuration file
可以看到,nginx為我們列出了參數(shù)指令的含義。
參數(shù) | 含義 |
-?,-h | 查看幫助信息 |
-v | 查看nginx版本 |
-V | 查看nginx版本以及配置選項(xiàng) |
-t | 測(cè)試配置文件語(yǔ)法是否正確 |
-T | 測(cè)試配置文件語(yǔ)法是否正確,并輸出配置內(nèi)容 |
-q | 測(cè)試配置文件過(guò)程中不顯示非錯(cuò)誤信息 |
-s | 向master進(jìn)程發(fā)送命令,stop:快速關(guān)閉,quit:優(yōu)雅關(guān)閉,reopen:重新打開日志,reload:重新加載配置文件 |
-p | 設(shè)置nginx執(zhí)行路徑,默認(rèn)為/usr/local/nginx/ |
-c | 以指定配置文件啟動(dòng)( |
-g | 從設(shè)置配置文件中全局指令(./nginx -g "pid logs/new.pid",便可以在啟動(dòng)nginx時(shí)修改配置文件中的默認(rèn)配置) |
在工作中,可能經(jīng)常涉及到配置文件的修改,因此,使用比較多的命令:
nginx -t
修改配置文件后,先測(cè)試配置文件語(yǔ)法的正確性
nginx -s reload
修改配置文件后,通知master進(jìn)程重新加載配置文件,master進(jìn)程會(huì)啟動(dòng)新的worker進(jìn)程,并向舊的worker進(jìn)程發(fā)送關(guān)閉命令,舊的worker進(jìn)程收到關(guān)閉命令后,停止接收新的連接直到當(dāng)前工作結(jié)束后退出。
kill命令
除了使用nginx命令,我們還可以通過(guò)kill命令向nginx的master進(jìn)程和worker進(jìn)程發(fā)送信號(hào),其中某些命令的效果與執(zhí)行nginx -s signal的效果是一樣的。
master進(jìn)程支持的信號(hào):
信號(hào) | 含義 |
TERM, INT | 快速關(guān)閉。與nginx -s stop效果一致。kill -s TERM pid,kill -s INT pid |
QUIT | 優(yōu)雅關(guān)閉。與nginx -s quit效果一致。kill -s QUIT pid |
HUP | 重新加載配置,與nginx -s reload效果一致。kill -s HUP pid |
USR1 | 重新打開日志。kill -s USR1 pid |
USR2 | 升級(jí)nginx可執(zhí)行文件,可以用來(lái)不停機(jī)升級(jí)nginx版本。kill -s USR2 pid |
WINCH | 優(yōu)雅關(guān)閉worker進(jìn)程。kill -s WINCH pid |
worker進(jìn)程支持的信號(hào):
信號(hào) | 含義 |
TERM, INT | 快速關(guān)閉。kill -s TERM pid,kill -s INT pid |
QUIT | 優(yōu)雅關(guān)閉。kill -s QUIT pid |
USR1 | 重新打開日志。kill -s USR1 pid |
WINCH | 調(diào)試異常終止。kill -s WINCH pid |
Nginx版本升級(jí)
1)查看當(dāng)前版本
./nginx -v nginx version: nginx/1.18.0
2)準(zhǔn)備新版本
下載鏈接:
http://nginx.org/download/nginx-1.22.1.tar.gz
3)解壓縮
tar zxvf nginx-1.22.1.tar.gz
4)設(shè)置configure
cd /home/stone/nginx-1.22.1/ sudo ./configure --sbin-path=/usr/local/nginx/nginx --conf-path=/usr/local/nginx/nginx.conf --pid-path=/usr/local/nginx/nginx.pid
5)編譯
sudo make
升級(jí)過(guò)程,只需要編譯,不需要安裝,否則會(huì)覆蓋已經(jīng)安裝的版本
6)查看新編譯的版本
cd objs/ ls autoconf.err Makefile nginx nginx.8 ngx_auto_config.h ngx_auto_headers.h ngx_modules.c ngx_modules.o src
可以看到,該目錄下也存在一個(gè)nginx文件,運(yùn)行nginx -v查看
./nginx -v nginx version: nginx/1.22.1
7)備份原nginx可執(zhí)行文件
如果后續(xù)升級(jí)失敗,還可以進(jìn)行版本回滾
cd /usr/local/nginx sudo mv nginx nginx.bak
8)復(fù)制新的nginx可執(zhí)行文件進(jìn)行替換
cd /home/stone/nginx-1.22.1/objs sudo cp nginx /usr/local/nginx/
9)查看當(dāng)前nginx進(jìn)程
ps -ef|grep nginx # 輸出結(jié)果 root 3253 1 0 11:07 ? 00:00:00 nginx: master process ./nginx nobody 3254 3253 0 11:07 ? 00:00:00 nginx: worker process stone 24596 3181 0 13:50 pts/1 00:00:00 grep --color=auto nginx
10)執(zhí)行升級(jí)命令
sudo kill -s USR2 `more /usr/local/nginx/nginx.pid`
再次查看nginx進(jìn)程,可以看到創(chuàng)建了新的master進(jìn)程和worker進(jìn)程,與此同時(shí),也是將舊版本的nginx的pid保存到nginx.pid.oldbin中。
ps -ef|grep nginx # 輸出結(jié)果 root 3253 1 0 11:07 ? 00:00:00 nginx: master process ./nginx nobody 3254 3253 0 11:07 ? 00:00:00 nginx: worker process root 25675 3253 0 13:53 ? 00:00:00 nginx: master process ./nginx nobody 25676 25675 0 13:53 ? 00:00:00 nginx: worker process
我們可以查看一下這個(gè)文件,確實(shí),其記錄了舊版本的master進(jìn)程pid
cat /usr/local/nginx/nginx.pid.oldbin 3253
此時(shí),所有的worker進(jìn)程(包括新的和舊的)繼續(xù)接收請(qǐng)求,我們可以向舊版本的master進(jìn)程發(fā)送WINCH命令以關(guān)閉其worker進(jìn)程。
sudo kill -s winch `cat /usr/local/nginx/nginx.pid.oldbin`
再次查看nginx進(jìn)程,舊版本的worker進(jìn)程已經(jīng)優(yōu)雅退出,只剩下master進(jìn)程。
ps -ef|grep nginx root 3253 1 0 11:07 ? 00:00:00 nginx: master process ./nginx root 25675 3253 0 13:53 ? 00:00:00 nginx: master process ./nginx nobody 25676 25675 0 13:53 ? 00:00:00 nginx: worker process
如果新版本的worker進(jìn)程運(yùn)行正常,那么我們就可以向舊版本的master進(jìn)程發(fā)送QUIT命令優(yōu)雅退出。
sudo kill -s quit `cat /usr/local/nginx/nginx.pid.oldbin`
到這里,我們的nginx版本也就在不停機(jī)的情況下平滑升級(jí)完成了。
以上就是Nginx基本命令&不停機(jī)版本升級(jí)的詳細(xì)內(nèi)容,更多關(guān)于Nginx命令不停機(jī)版本升級(jí)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Nginx配置同一個(gè)域名同時(shí)支持http與https兩種方式訪問(wèn)實(shí)現(xiàn)
這篇文章主要介紹了Nginx配置同一個(gè)域名同時(shí)支持http與https兩種方式訪問(wèn)實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08nginx上設(shè)置html不緩存的方法實(shí)現(xiàn)
前端項(xiàng)目發(fā)布以后,經(jīng)常會(huì)遇到訪問(wèn)不到最新的版本,這主要是由于我們項(xiàng)目的入口文件index.html被瀏覽器或者代理緩存了,本文主要介紹了nginx上設(shè)置html不緩存,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02nginx服務(wù)器access日志中大量400 bad request錯(cuò)誤的解決方法
這篇文章主要介紹了nginx服務(wù)器access日志中大量400 bad request錯(cuò)誤的解決方法,本文結(jié)論是空主機(jī)頭導(dǎo)致的大量400錯(cuò)誤日志,關(guān)閉默認(rèn)主機(jī)的日志記錄就可以解決問(wèn)題,需要的朋友可以參考下2015-01-01angular6+springboot實(shí)現(xiàn)前后分離nginx配置
這篇文章主要介紹了angular6+springboot實(shí)現(xiàn)前后分離nginx配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06配置nginx訪問(wèn)本地靜態(tài)資源,本地圖片,視頻教程
文章介紹了如何配置Nginx以訪問(wèn)本地靜態(tài)資源、圖片和視頻,首先,進(jìn)入Nginx安裝目錄并打開`nginx.conf`文件,添加一個(gè)新的`server`配置來(lái)指定本地路徑,然后,通過(guò)命令行重啟Nginx服務(wù)以應(yīng)用更改,最后,通過(guò)瀏覽器訪問(wèn)配置的圖片路徑來(lái)驗(yàn)證配置是否成功2025-01-01