nginx的工作流程


nginx請求處理流程

 

nginx進程結構

master進程:是作為worker進程管理的

worker進程:處理真正的請求的而master進程則是管控這些進程的工作方式的;緩存是在多個worker進程共享數據的;進程間通信使用共享內存解決的,請求使用的緩存有worker管控的

cache magager進程 :緩存管理

cache loader 進程:緩存載入

nginx設計的哲學理念:為什么多進程而非多線程;因為線程之間是共享同一個進程空間的,當第三方模塊出現異常時會導致nginx掛掉,而多進程就不會出現這樣的問題

為什么worker進程會很多:因為nginx采用事件驅動的模型,它希望每個worker進程從頭到尾占用一顆cpu,往往把worker進程數量配置根worker進程一致以外,還需要把每個worker進程與CPU綁定在一起,這樣可以更好使用每個cpu上的CPU緩存,來減少緩存失效命中率。

 nginx進程間的信號管理

reload流程

1.向master進程發送HUP信號(reload)

2.maseer 進程校驗配置語法是否正確

3.master進程打開新監聽的端口

4.master進程用新配置啟動worker子進程

5.master進程向老worker子進程發送quit信號

6.老worker進程關閉監聽句柄,並處理完當前連接后退出結束進程

 

 熱升級完整流程

1.將就的nginx文件緩存新的nginx文件。注意備份,及編譯新版本nginx指定的路徑要與就版本中一致

2.向master進程發送USR2信號

3.master進程會自己修改PID文件名,加后綴.oldbm

4.master進程用新的NGINX文件啟動新的master進程

5.向老master進程發送quit信號,關閉老master進程;但老的master進程會保存下來

6.回滾:向老的master發送HUP,向新master發送QUIT信號

流程圖

針對HTTP請求優雅關閉work進程,如果設置了超時時間有一些連接會立即停止

網絡收發與nginx的事件對應關系;一個網絡連接對應兩個事件一個讀事件一個寫事件

網絡傳輸中的報文

TCP協議與非阻塞接口

nginx事件循環

 

epoll模型

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM