本節(jié)介紹NGINX在運(yùn)行時(shí)啟動(dòng)的過(guò)程以及如何控制它們。
在這個(gè)部分中,主要涉及兩個(gè)部分的內(nèi)容:
NGINX有一個(gè)主進(jìn)程和一個(gè)或多個(gè)工作進(jìn)程。 如果啟用緩存,緩存加載程序和緩存管理器進(jìn)程也將在啟動(dòng)時(shí)運(yùn)行。
主程序的主要目的是讀取和評(píng)估配置文件以及維護(hù)工作進(jìn)程。
工作進(jìn)程執(zhí)行請(qǐng)求的實(shí)際處理。 NGINX依賴于操作系統(tǒng)的機(jī)制來(lái)有效地在工作進(jìn)程之間分配請(qǐng)求。 工作進(jìn)程的數(shù)量可在nginx.conf配置文件中定義,可以針對(duì)給定的配置進(jìn)行修復(fù),或者自動(dòng)調(diào)整為可用CPU內(nèi)核數(shù)(請(qǐng)參閱worker_processes)。
要重新加載配置文件,可以停止或重新啟動(dòng)NGINX,或者發(fā)送信號(hào)到主進(jìn)程。 可以使用-s參數(shù)運(yùn)行nginx命令(調(diào)用NGINX可執(zhí)行文件)來(lái)發(fā)送信號(hào)。
nginx -s signal
信號(hào)的值可以是以下之一:
quit – 正常地關(guān)閉reload – 重新加載配置文件reopen – 重新打開(kāi)日志文件stop – 立即關(guān)閉(快速關(guān)閉)殺死實(shí)用程序也可以使用,將信號(hào)直接發(fā)送到主進(jìn)程。 默認(rèn)情況下,主進(jìn)程的進(jìn)程ID被寫(xiě)入位于/usr/local/nginx/logs或/var/run目錄中的nginx.pid文件。
nginx可以用信號(hào)控制。 默認(rèn)情況下,主進(jìn)程的進(jìn)程ID將寫(xiě)入文件/usr/local/nginx/logs/nginx.pid。 該名稱可能在配置時(shí)更改,或使用pid指令在nginx.conf文件中進(jìn)行更改。主程序支持以下信號(hào):
TERM, INT - 快速關(guān)閉QUIT - 正常關(guān)閉HUP - 改變配置,跟上改變的時(shí)區(qū)(僅適用于FreeBSD和Linux),使用新配置啟動(dòng)新的工作進(jìn)程,正常關(guān)閉舊的工作進(jìn)程USR1 - 重新打開(kāi)日志文件USR2 - 升級(jí)可執(zhí)行文件WINCH - 正常關(guān)閉工作進(jìn)程個(gè)別工作進(jìn)程可以用信號(hào)來(lái)控制,盡管這不是必需的。 支持的信號(hào)有:
debug_points)更改配置
為了使nginx重新讀取配置文件,應(yīng)將HUP信號(hào)發(fā)送到主進(jìn)程。 主進(jìn)程首先檢查語(yǔ)法有效性,然后嘗試應(yīng)用新配置,即打開(kāi)日志文件和新的監(jiān)聽(tīng)套接字。 如果失敗,它會(huì)回滾更改,并繼續(xù)使用舊配置。 如果此操作成功,它將啟動(dòng)新的工作進(jìn)程,并向舊的工作進(jìn)程發(fā)送消息,請(qǐng)求它們正常關(guān)閉。 舊工作進(jìn)程密切監(jiān)聽(tīng)套接字,并繼續(xù)為舊客戶端服務(wù)。 在所有客戶端被服務(wù)之后,舊的工作進(jìn)程被關(guān)閉。
我們來(lái)舉例說(shuō)明一下。 想象一下,nginx是在FreeBSD 4.x上運(yùn)行,執(zhí)行以下命令:
ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'
產(chǎn)生以下輸出:
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發(fā)送到主進(jìn)程,則輸出變?yōu)椋?/p>
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的老工作流程仍然繼續(xù)運(yùn)行。 一段時(shí)間后,它退出:
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)
循環(huán)日志文件
要循環(huán)日志文件,需要首先重命名。 之后,USR1信號(hào)應(yīng)發(fā)送到主進(jìn)程。 然后,主進(jìn)程將重新打開(kāi)所有當(dāng)前打開(kāi)的日志文件,并將其分配給正在運(yùn)行的工作進(jìn)程的非特權(quán)用戶作為所有者。 成功重新打開(kāi)后,主程序關(guān)閉所有打開(kāi)的文件,并將消息發(fā)送到工作進(jìn)程,要求他們重新打開(kāi)文件。 工作進(jìn)程也會(huì)打開(kāi)新文件并立即關(guān)閉舊文件。 因此,舊文件幾乎立即可用于后處理,如壓縮。