本節介紹NGINX在執行時啟動的過程以及如何控制它們。
在這個部分中,主要涉及兩個部分的內容:
NGINX有一個主進程和一個或多個工作進程。 如果啟用快取,快取載入程式和快取管理器進程也將在啟動時執行。
主程式的主要目的是讀取和評估組態檔案以及維護工作進程。
工作進程執行請求的實際處理。 NGINX依賴於作業系統的機制來有效地在工作進程之間分配請求。 工作進程的數量可在nginx.conf
組態檔案中定義,可以針對給定的組態進行修復,或者自動調整為可用CPU核心數(請參閱worker_processes)。
要重新載入組態檔案,可以停止或重新啟動NGINX,或者傳送信號到主進程。 可以使用-s
引數執行nginx命令(呼叫NGINX可執行檔案)來傳送信號。
nginx -s signal
信號的值可以是以下之一:
quit
– 正常地關閉reload
– 重新載入組態檔案reopen
– 重新開啟紀錄檔檔案stop
– 立即關閉(快速關閉)殺死實用程式也可以使用,將信號直接傳送到主進程。 預設情況下,主進程的進程ID被寫入位於/usr/local/nginx/logs
或/var/run
目錄中的nginx.pid
檔案。
nginx可以用信號控制。 預設情況下,主進程的進程ID將寫入檔案/usr/local/nginx/logs/nginx.pid
。 該名稱可能在組態時更改,或使用pid
指令在nginx.conf
檔案中進行更改。主程式支援以下信號:
TERM
, INT
- 快速關閉QUIT
- 正常關閉HUP
- 改變組態,跟上改變的時區(僅適用於FreeBSD和Linux),使用新組態啟動新的工作進程,正常關閉舊的工作進程USR1
- 重新開啟紀錄檔檔案USR2
- 升級可執行檔案WINCH
- 正常關閉工作進程個別工作進程可以用信號來控制,儘管這不是必需的。 支援的信號有:
debug_points
)更改組態
為了使nginx重新讀取組態檔案,應將HUP信號傳送到主進程。 主進程首先檢查語法有效性,然後嘗試應用新組態,即開啟紀錄檔檔案和新的監聽通訊端。 如果失敗,它會回滾更改,並繼續使用舊組態。 如果此操作成功,它將啟動新的工作進程,並向舊的工作進程傳送訊息,請求它們正常關閉。 舊工作進程密切監聽通訊端,並繼續為舊用戶端服務。 在所有用戶端被服務之後,舊的工作進程被關閉。
我們來舉例說明一下。 想象一下,nginx是在FreeBSD 4.x上執行,執行以下命令:
ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'
產生以下輸出:
PID PPID USER %CPU VSZ WCHAN COMMAND
33126 1 root 0.0 1148 pause nginx: master process /usr/local/nginx/sbin/nginx
33127 33126 nobody 0.0 1380 kqread nginx: worker process (nginx)
33128 33126 nobody 0.0 1364 kqread nginx: worker process (nginx)
33129 33126 nobody 0.0 1364 kqread nginx: worker process (nginx)
如果將HUP傳送到主進程,則輸出變為:
PID PPID USER %CPU VSZ WCHAN COMMAND
33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx
33129 33126 nobody 0.0 1380 kqread nginx: worker process is shutting down (nginx)
33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
33135 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
PID 33129
的老工作流程仍然繼續執行。 一段時間後,它退出:
PID PPID USER %CPU VSZ WCHAN COMMAND
33126 1 root 0.0 1164 pause nginx: master process /usr/local/nginx/sbin/nginx
33134 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
33135 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
33136 33126 nobody 0.0 1368 kqread nginx: worker process (nginx)
迴圈紀錄檔檔案
要迴圈紀錄檔檔案,需要首先重新命名。 之後,USR1信號應傳送到主進程。 然後,主進程將重新開啟所有當前開啟的紀錄檔檔案,並將其分配給正在執行的工作進程的非特權使用者作為所有者。 成功重新開啟後,主程式關閉所有開啟的檔案,並將訊息傳送到工作進程,要求他們重新開啟檔案。 工作進程也會開啟新檔案並立即關閉舊檔案。 因此,舊檔案幾乎立即可用於後處理,如壓縮。