运行中的Nginx进程间的关系
第2章 Nginx的配置
Nginx擁有大量官方發布的模塊和第三方模塊,這些已有的模塊可以幫助我們實現Web服務器上很多的功能。使用這些模塊時,僅僅需要增加、修改一些配置項即可。因此,本章的目的是熟悉Nginx的配置文件,包括配置文件的語法格式、運行所有Nginx服務必須具備的基礎配置以及使用HTTP核心模塊配置靜態Web服務器的方法,最后還會介紹反向代理服務器。
通過本章的學習,讀者可以:熟練地配置一個靜態Web服務器;對影響Web服務器性能的各個配置項有深入的理解;對配置語法有全面的了解。通過互聯網或其他途徑得到任意模塊的配置說明,然后可通過修改nginx.conf文件來使用這些模塊的功能。
2.1 運行中的Nginx進程間的關系
在正式提供服務的產品環境下,部署Nginx時都是使用一個master進程來管理多個worker進程,一般情況下,worker進程的數量與服務器上的CPU核心數相等。每一個worker進程都是繁忙的,它們在真正地提供互聯網服務,master進程則很“清閑”,只負責監控管理worker進程。worker進程之間通過共享內存、原子操作等一些進程間通信機制來實現負載均衡等功能(第9章將會介紹負載均衡機制,第14章將會介紹負載均衡鎖的實現)。
部署后Nginx進程間的關系如圖2-1所示。
Nginx是支持單進程(master進程)提供服務的,那么為什么產品環境下要按照master-worker方式配置同時啟動多個進程呢?這樣做的好處主要有以下兩點:
由于master進程不會對用戶請求提供服務,只用于管理真正提供服務的worker進程,所以master進程可以是唯一的,它僅專注于自己的純管理工作,為管理員提供命令行服務,包括諸如啟動服務、停止服務、重載配置文件、平滑升級程序等。master進程需要擁有較大的權限,例如,通常會利用root用戶啟動master進程。worker進程的權限要小于或等于master進程,這樣master進程才可以完全地管理worker進程。當任意一個worker進程出現錯誤從而導致coredump時,master進程會立刻啟動新的worker進程繼續服務。
多個worker進程處理互聯網請求不但可以提高服務的健壯性(一個worker進程出錯后,其他worker進程仍然可以正常提供服務),最重要的是,這樣可以充分利用現在常見的SMP多核架構,從而實現微觀上真正的多核并發處理。因此,用一個進程(master進程)來處理互聯網請求肯定是不合適的。另外,為什么要把worker進程數量設置得與CPU核心數量一致呢?這正是Nginx與Apache服務器的不同之處。在Apache上每個進程在一個時刻只處理一個請求,因此,如果希望Web服務器擁有并發處理的請求數更多,就要把Apache的進程或線程數設置得更多,通常會達到一臺服務器擁有幾百個工作進程,這樣大量的進程間切換將帶來無謂的系統資源消耗。而Nginx則不然,一個worker進程可以同時處理的請求數只受限于內存大小,而且在架構設計上,不同的worker進程之間處理并發請求時幾乎沒有同步鎖的限制,worker進程通常不會進入睡眠狀態,因此,當Nginx上的進程數與CPU核心數相等時(最好每一個worker進程都綁定特定的CPU核心),進程間切換的代價是最小的。
舉例來說,如果產品中的服務器CPU核心數為8,那么就需要配置8個worker進程(見圖2-2)。
如果對路徑部分都使用默認配置,那么Nginx運行目錄為/usr/local/nginx,其目錄結構如下。
?
總結
以上是生活随笔為你收集整理的运行中的Nginx进程间的关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NGINX 进程通信机制
- 下一篇: 深入理解Nginx 模块开发与架构解析-