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模型

、
