nginx是乙個多程序/多執行緒高效能web伺服器,在linux系統中,nginx啟動後會以後臺守護程序(daemon)的方式去執行,後台程序包含乙個master程序和多個worker程序(這個數量可以在nginx.conf配置檔案中worker_processes這個引數設定),可以充分利用多核架構。nginx工作模式是以多程序的方式來工作的,當然nginx也是支援多執行緒的方式的,只是我們主流的方式還是多程序的方式,也是nginx的預設方式。nginx在啟動之後會有乙個master程序和多個worker程序(預設是乙個),多個worker子程序將監聽同乙個埠,並行處理請求。
master主程序主要用來管理worker程序,主要作用是:讀取並驗正配置資訊,管理真正提供服務的worker程序,向各worker程序傳送訊號,監控worker程序的執行狀態,當worker程序退出後(異常情況下),會自動重新啟動新的worker程序。master程序不會對使用者請求提供服務,而使用者的請求則是worker程序來響應的。
nginx是通過訊號來控制,比如關閉,重啟等去控制nginx程序。nginx訊號是屬於nginx程序間的通訊的一種機制,比如master主程序控制多個worker子程序,也是通過訊號控制的,如下圖。
worker 程序數應該設定為等於 cpu 的核數,高流量併發場合也可以考慮將程序數提高至 cpu 核數 * 2。
命令選項
作用term,int
term:終止訊號。這是kill命令預設傳送的訊號型別。
int:中斷訊號。執行效果和在終端按下ctrl-c鍵的效果一樣。通常用來終止乙個程式。
直接關閉程序,不管程序是否正在被請求都講關閉(粗暴,這樣對nginx有影響,一般不這麼做)
quit
優雅地關閉程序,即等當前程序中請求結束後再關閉
hup這就意味著,當乙個後台程序接收到該訊號時,它將重啟並且重新讀取它的配置檔案。
用法:kill -hup xx(nginx master pid)
user1
重新讀取日誌檔案,在切割日誌時用途較大(停止寫入老日誌檔案,開啟新日誌檔案,之所以這樣是因為老日誌檔案就算修改的檔名,由於inode的原因(nginx程序是根據檔案inode來識別檔案在硬碟的位置,所以改名後nginx還會一直往老的日誌檔案寫入資料)
user2
平滑公升級可執行程式 ,nginx公升級時候用。
當nginx公升級版本,當新版本的二進位制的檔案覆蓋舊的後,就需要使用它來讀取新的二進位制檔案,不然不會讀取。
用法:kill -usr2 `cat nginx.pid`
winch
優雅從容的關閉worker程序 (一般配合usr2使用)
-snginx -s (reload,reopen,start,quit,stop)
-s reopen 重讀日誌檔案(相當於-usr1)
-s reload 重讀配置檔案相當於hup
-s stop 強制退出
-t 測試配置檔案語法 t就是test的意思
執行目錄/usr/local/nginx/sbin
幫助:nginx -?
nginx -h
檢視nginx的版本資訊:nginx -v
檢視完整的nginx的配置資訊:nginx -v
檢視nginx是否啟動:ps -ef | grep nginx
強制停止nginx:pkill -9 nginx
使用指定的配置檔案:nginx -c
使用指定的配置指令:nginx -g
使用指定的執行目錄:nginx -p
傳送訊號:nginx -s
測試配置檔案是否有語法錯誤:-t -t
# ps aux | grep nginx
# /usr/local/nginx/sbin/nginx -s reload
# kill -quit [nginx主程序號]
使用語法:
kill -訊號選項 nginx主程序號
如:
方式一:kill -int 3242
方式二: kill -int 'cat /usr/local/nginx/logs/nginx.pid'
首先應進入sbin目錄中
a)備份原二進位制檔案
b)覆蓋新二進位制檔案到原檔案
注:新二進位制檔案是nginx原始碼make編譯後的objs檔案中nginx.sh
熱部署不需要執行make install 安裝命令
c)向nginx的master程序傳送訊號,告訴其要開始熱部署了。
命令:kill -user2 [master程序pid]
注:接收到訊號後nginx會新開乙個master程序,並在新的程序中使用新的二進位制可執行檔案。此時新舊master程序都在執行,但是舊的master程序已經不再監聽80埠了,所有新的請求都會到新的master程序中。
d)向舊的master程序傳送訊號,告訴其可以優雅的結束自己了。
命令:kill -winch 12345
注:此時舊的worker程序已經消失了,但是舊的master程序還在。這是因為一旦新二進位制檔案有錯誤,直接reload舊master,並down掉新master程序,做版本回退。
a)mv 原檔名 新檔名 (這裡只能使用mv命令,linux系統會保證指向舊檔名的寫入直接寫入到新檔名而不會發生錯誤)
b)重置配置檔案
命令:./nginx -s reopen
nginx的訊號量
在研發過程中,修改nginx的配置檔案nginx.conf是很平常的事,需要重啟nginx。如果我們直接reload是有一定風險的,我們可以通過傳送系統訊號給nginx主程序的方式來進行。第一步 確認nginx配置檔案的語法是否正確,否則nginx將不會載入新的配置檔案。如果出現這樣的資訊說明配置檔...
Nginx學習筆記 訊號量
2016 7 9 18 02 2018 09 14 15 02 su檢視nginx的程序 master 主程序,控制著子程序 worker process 子程序 hup 優雅的改變配置檔案,平滑的重讀配置檔案 ps aux grep nginx 查詢主程序號 kill hup 主程序號 kill ...
Nginx訊號量學習總結
總結如下 訊號選項 含義term int quick shutdown 立即停止 quit 優雅的關閉程序,即等請求結束後再關閉 hup改變配置檔案之後,平滑的重讀配置檔案,即重新讀取新的配置重啟 user1 重讀日誌,在日誌按月 日進行分割時有用,例如每天備份乙個檔案,然後重新建立access.l...