Nginx基本命令&不停機版本升級
Nginx基本命令&不停機版本升級
在上一篇文章【Linux】Ubuntu安裝Nginx(在線安裝&源碼編譯安裝)中,我們已經(jīng)通過源碼編譯安裝nginx,其nginx執(zhí)行文件的地址為:/usr/local/nginx
Nginx工作模型
我們先來看看nginx啟動之后的進(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
可以看到,目前運行的nginx存在一個master進(jìn)程和一個worker進(jìn)程,它們有著明確的分工:
- master進(jìn)程:讀取和評估配置。
- worker進(jìn)程:處理請求,工作進(jìn)程的數(shù)量可以在配置文件中定義。
nginx采用基于事件的模型并依賴于操作系統(tǒng)的機制高效地在工作進(jìn)程之間分發(fā)請求。
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版本以及配置選項 |
-t | 測試配置文件語法是否正確 |
-T | 測試配置文件語法是否正確,并輸出配置內(nèi)容 |
-q | 測試配置文件過程中不顯示非錯誤信息 |
-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 | 以指定配置文件啟動( |
-g | 從設(shè)置配置文件中全局指令(./nginx -g "pid logs/new.pid",便可以在啟動nginx時修改配置文件中的默認(rèn)配置) |
在工作中,可能經(jīng)常涉及到配置文件的修改,因此,使用比較多的命令:
nginx -t
修改配置文件后,先測試配置文件語法的正確性
nginx -s reload
修改配置文件后,通知master進(jìn)程重新加載配置文件,master進(jìn)程會啟動新的worker進(jìn)程,并向舊的worker進(jìn)程發(fā)送關(guān)閉命令,舊的worker進(jìn)程收到關(guān)閉命令后,停止接收新的連接直到當(dāng)前工作結(jié)束后退出。
kill命令
除了使用nginx命令,我們還可以通過kill命令向nginx的master進(jìn)程和worker進(jìn)程發(fā)送信號,其中某些命令的效果與執(zhí)行nginx -s signal的效果是一樣的。
master進(jìn)程支持的信號:
信號 | 含義 |
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 | 升級nginx可執(zhí)行文件,可以用來不停機升級nginx版本。kill -s USR2 pid |
WINCH | 優(yōu)雅關(guān)閉worker進(jìn)程。kill -s WINCH pid |
worker進(jìn)程支持的信號:
信號 | 含義 |
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版本升級
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ī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
可以看到,該目錄下也存在一個nginx文件,運行nginx -v查看
./nginx -v nginx version: nginx/1.22.1
7)備份原nginx可執(zhí)行文件
如果后續(xù)升級失敗,還可以進(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í)行升級命令
sudo kill -s USR2 `more /usr/local/nginx/nginx.pid`
再次查看nginx進(jìn)程,可以看到創(chuàng)建了新的master進(jìn)程和worker進(jìn)程,與此同時,也是將舊版本的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
我們可以查看一下這個文件,確實,其記錄了舊版本的master進(jìn)程pid
cat /usr/local/nginx/nginx.pid.oldbin 3253
此時,所有的worker進(jìn)程(包括新的和舊的)繼續(xù)接收請求,我們可以向舊版本的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)程運行正常,那么我們就可以向舊版本的master進(jìn)程發(fā)送QUIT命令優(yōu)雅退出。
sudo kill -s quit `cat /usr/local/nginx/nginx.pid.oldbin`
到這里,我們的nginx版本也就在不停機的情況下平滑升級完成了。
以上就是Nginx基本命令&不停機版本升級的詳細(xì)內(nèi)容,更多關(guān)于Nginx命令不停機版本升級的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Nginx配置同一個域名同時支持http與https兩種方式訪問實現(xiàn)
這篇文章主要介紹了Nginx配置同一個域名同時支持http與https兩種方式訪問實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08nginx上設(shè)置html不緩存的方法實現(xiàn)
前端項目發(fā)布以后,經(jīng)常會遇到訪問不到最新的版本,這主要是由于我們項目的入口文件index.html被瀏覽器或者代理緩存了,本文主要介紹了nginx上設(shè)置html不緩存,具有一定的參考價值,感興趣的可以了解一下2024-02-02nginx服務(wù)器access日志中大量400 bad request錯誤的解決方法
這篇文章主要介紹了nginx服務(wù)器access日志中大量400 bad request錯誤的解決方法,本文結(jié)論是空主機頭導(dǎo)致的大量400錯誤日志,關(guān)閉默認(rèn)主機的日志記錄就可以解決問題,需要的朋友可以參考下2015-01-01angular6+springboot實現(xiàn)前后分離nginx配置
這篇文章主要介紹了angular6+springboot實現(xiàn)前后分離nginx配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06配置nginx訪問本地靜態(tài)資源,本地圖片,視頻教程
文章介紹了如何配置Nginx以訪問本地靜態(tài)資源、圖片和視頻,首先,進(jìn)入Nginx安裝目錄并打開`nginx.conf`文件,添加一個新的`server`配置來指定本地路徑,然后,通過命令行重啟Nginx服務(wù)以應(yīng)用更改,最后,通過瀏覽器訪問配置的圖片路徑來驗證配置是否成功2025-01-01