**:進入nginx的大致三種流量:web、email及tcp
nginx中三個狀態機:
狀態機作用:nginx採用epoll非同步非阻塞事件驅動處理引擎,需要狀態機識別和處理請求,將解析出來的請求引導到靜態資源或磁碟快取(做反向**時)。
當靜態資源太多,記憶體不足以快取時,磁碟呼叫會退化成阻塞呼叫,所以我們使用執行緒池來處理。
執行緒池詳解
總的來說:執行緒池就是乙個單獨的處理機制,所有的worker程序處理起來耗時的任務都會交給他,他處理完之後返回結果。worker程序不需要等待,客戶端等待就行。
對每乙個處理完成的請求會記錄access訪問日誌和error錯誤日誌(記錄到磁碟中的)。
nginx作反向**時可以使用應用層協議http、fastcgi等將請求**到其他伺服器。
為什麼nginx採用多程序結構而不是多執行緒結構?
nginx目的:保持高可用性和高可靠性。
如果採用多執行緒模型,執行緒之間共享位址空間,如果某個第三方模組引發位址空間導致的段錯誤時,在位址越界出現時,會導致整個nginx全部掛掉。而多程序就不會出現這種問題。
程序作用
master程序:負責監控每個worker程序工作狀態。
worker程序:處理請求。快取需要在多個worker之間進行共享。
cache manager:做反向**時為後端發來的動態請求做快取使用的。做快取管理。
cache loader:做反向**時為後端發來的動態請求做快取使用的。做快取載入。
程序間的通訊方式:共享記憶體。
為什麼有多個worker程序?
nginx採用事件驅動模型,希望每個worker程序從頭到尾占有乙個cpu。我們需要將worker程序數配置成與cpu核數相同的同時將每乙個worker和乙個cpu繫結在一起。這樣可以更好的使用每乙個cpu核上的cpu快取來減少快取失效的命中率。
nginx -s reload
kill -sighup 父程序id
會將老的子程序(worker和cache程序)優雅的退出,載入配置檔案,啟動新的子程序。
kill -sigterm 子程序id
子程序退出告知父程序,父程序會重新起乙個子程序,維持原有worker數量。
解析:子程序終止時會給父程序傳送chld訊號,如果worker程序由於某些bug意外終止,master程序會立馬發現並拉起worker程序。
通過nginx命令列方式傳送訊號:
term,int:立刻停止nginx程序
quit:優雅停止nginx
hup:過載配置檔案
usr1:重新開啟日誌檔案,做日誌檔案切割
專門針對做熱部署時使用,只能通過kill(linux命令列)傳送訊號:
usr2
winch
reload流程:
1、向master程序傳送hup訊號(reload命令)
2、master程序校驗配置語法是否正確(nginx -t)
3、master程序開啟新的監聽埠(子程序會繼承所以master開啟的埠,我們可能引入了新的監聽埠)
4、master程序用新配置啟動新的worker子程序
5、master程序向老worker子程序發生quit訊號
6、老worker程序關閉監聽控制代碼,處理完當前連線後結束程序
master程序啟動新的子程序時會加乙個定時器worker_shutdown_timeout,定時器到時後會立刻強制退出還未退出的老worker程序。
1、將舊nginx檔案替換成新nginx檔案
2、向老master程序傳送usr2訊號
3、master程序修改pid檔名,加字尾.oldbin(儲存老pid檔案)
4、master程序用新nginx檔案啟動新master程序。(目前為止有兩個master程序)
5、向老master程序傳送winch訊號,關閉老worker
6、回滾:向老master傳送hup,向新master傳送quit。
詳解Nginx 工作原理
nginx工作原理 nginx由核心和模組組成。ngwww.cppcns.cominx本身做的工作實際很少,當它接到乙個http請求時,它僅僅是通過查詢配置檔案將此次請求對映到乙個loca程式設計客棧tion block,而此location中所配置的各個指令則會啟動不同的模組去完成工作,因此模組可...
Nginx工作原理
nginx web伺服器主要是由各種模組協同工作,模組從結構上分為核心模組,基礎模 塊和第三方模組,其中三類模組分別如下 1 核心模組 http模組 event模組和mail模組等 2 基礎模組 http access模組 http fastcgi模組 http proxy模組和http rewri...
Nginx工作原理
nginx engine x 是乙個高效能http 反向 imap pop3 smtp伺服器 nginx web伺服器主要是由各種模組協同工作 從結構上分為 核心模組 http模組 event模組和mail模組等 基礎模組 http access模組 http fastcgi模組 http prox...