一、Nginx的請求處理流程進程結構
1、Nginx的請求處理流程
2、Nginx的進程結構
3、進程作用
1、Master進程
1、是進行work進程的監控管理的
2、看看work進程是否正常工作需不需要進行熱部署、需不需要重新載入配置文件
2、Cache manager 緩存的管理
1、緩存為反向代理后端發來的動態請求做緩存使用
2、緩存在不光是在work進程間使用、還要被Cache manager和Cache loader使用
3、Cache loader 載入緩存
二、Nginx的進程結構實例演示
[root@luoahong vim]# ps -ef|grep nginx root 24145 1 0 11:08 ? 00:00:00 nginx: master process ../sbin/nginx nobody 24191 24145 0 11:36 ? 00:00:00 nginx: worker process nobody 24192 24145 0 11:36 ? 00:00:00 nginx: worker process root 24196 24153 0 11:38 pts/1 00:00:00 grep --color=auto nginx [root@luoahong conf]# ../sbin/nginx -s reload [root@luoahong vim]# ps -ef|grep nginx root 24145 1 0 11:08 ? 00:00:00 nginx: master process ../sbin/nginx nobody 24198 24145 0 11:38 ? 00:00:00 nginx: worker process nobody 24199 24145 0 11:38 ? 00:00:00 nginx: worker process root 24201 24153 0 11:38 pts/1 00:00:00 grep --color=auto nginx [root@luoahong vim]#kill -SIGHUP 24145 [root@luoahong vim]# ps -ef|grep nginx root 24145 1 0 11:08 ? 00:00:00 nginx: master process ../sbin/nginx nobody 24203 24145 0 11:40 ? 00:00:00 nginx: worker process nobody 24204 24145 0 11:40 ? 00:00:00 nginx: worker process root 24206 24153 0 11:40 pts/1 00:00:00 grep --color=auto nginx
kill -SIGHUP 24145和../sbin/nginx -s reload的作用一樣
三、使用信號管理Nginx的父子進程
四、reload和熱升級
1、reload重載配置文件的真相
1、向master進程發送HUP信號(reload命令)
2、master進程校驗配置語法是否正確
3、master進程進程打開新的監聽端口
為什么要打開新的監聽端口?因為有可能會打開原來沒有打開過的端口
4、master進程用新配置啟動新的worker子進程
設置定時器 worker_shutdown_timeout
5、master進程向老worker子進程發送OUIT信號
6、老worker進程關閉監聽句柄,處理完當前連接后結束進程
2、不停機載入新的配置文件
3、熱升級的完整流程(文字)
1、將舊Nginx文件換成新Nginx文件(注意備份)
nginx的Master進程的PID會記錄在logs目錄的nginx.pid文件中、新nginx和老的nginx 所有的目錄必須一致
2、向master進程發送USR2信號
沒有辦法通過nginx命令行發送信號處理,是因為到目前為止還沒有這樣的信號
3、master進程修改pid文件名,加后綴.oldbin
nginx的Master進程的PID會記錄在logs目錄的nginx.pid文件中
4、master進程用新的Nginx文件啟動新的master進程
5、向老master進程發送QUIT信號,關閉老master
6、回滾:向老master發送HUP,向新master發送OUIT
4、不停機更新nginx二進制文件
五、優雅地關閉worker進程
worker進程優雅的關閉,主要針對的是HTTP請求。代理websocker協議,TCP,UDP層的時候不能優雅推出
1、設置定時器 worker_shutdown_timeout
2、關閉監聽句柄 :保證要關閉的進程不再處理新的連接
3、關閉空閑連接 :為了利用最大化,會保存一些空閑的連接,這時會被關閉。
4、在循環中等待全部連接關閉:每發現一個請求處理完畢就會把這個連接關閉。超過設置的worker_shutdown_timeout的時間,會立即退出。
5、退出進程