Nginx 最重要的功能是反向代理和負(fù)載均衡,反向代理將允許我們?cè)诙丝?80 上托管多個(gè)域名,同時(shí)使用不同的語(yǔ)言編寫后端服務(wù),負(fù)載均衡可以把多個(gè)提供相同功能的后端服務(wù)配置成彼此冗余。
Nginx 負(fù)責(zé)訪問日志、黑名單、負(fù)載平衡和提供靜態(tài)文件訪問,后臺(tái) Web 服務(wù)則可專注于業(yè)務(wù)邏輯處理,Nginx 是動(dòng)靜分離架構(gòu)的入口程序。
Nginx 支持高并發(fā),內(nèi)存占用小。
Nginx 支持配置文件動(dòng)態(tài)修改。
nginx 在啟動(dòng)后,會(huì)以 daemon 的方式在后臺(tái)運(yùn)行,后臺(tái)進(jìn)程包含一個(gè) master 進(jìn)程和多個(gè) worker 進(jìn)程,worker 進(jìn)程以非 root 用戶運(yùn)行,可以在配置文件中配置運(yùn)行 worker 進(jìn)程的用戶。
master 進(jìn)程主要用來(lái)管理 worker 進(jìn)程,包含:接收來(lái)自外界的信號(hào),向各 worker 進(jìn)程發(fā)送信號(hào),監(jiān)控 worker 進(jìn)程的運(yùn)行狀態(tài),當(dāng) worker 進(jìn)程退出后(異常情況下),會(huì)自動(dòng)重新啟動(dòng)新的 worker 進(jìn)程。
worker 進(jìn)程則是處理基本的網(wǎng)絡(luò)事件。多個(gè) worker 進(jìn)程之間是對(duì)等的,他們同等競(jìng)爭(zhēng)來(lái)自客戶端的請(qǐng)求,各進(jìn)程互相之間是獨(dú)立的。一個(gè)請(qǐng)求,只可能在一個(gè) worker 進(jìn)程中處理,一個(gè) worker 進(jìn)程,不可能處理其它進(jìn)程的請(qǐng)求。
總結(jié)其主要功能分別如下:
主進(jìn)程(master process)的功能:
工作進(jìn)程(woker process)的功能:
master 進(jìn)程:負(fù)責(zé)加載和分析配置文件、管理 worker 進(jìn)程,平滑升級(jí)
worker 進(jìn)程:接收客戶端請(qǐng)求、將請(qǐng)求一次送入各模塊過濾、I/O 調(diào)用、數(shù)據(jù)緩存、發(fā)送響應(yīng)
cache相關(guān)進(jìn)程:cache loader (緩存索引重建)與 cache manager( 緩存索引管理)組成
--Cache loader 在 Nginx 服務(wù)啟動(dòng)后由主進(jìn)程生成,根據(jù)本地磁盤上緩存建立索引元數(shù)據(jù)庫(kù)后退出。
--Cache manager 在元數(shù)據(jù)更新完成后,對(duì)元數(shù)據(jù)是否過期做出判斷。
Nginx 的各種功能和操作都由模塊來(lái)實(shí)現(xiàn)。Nginx 由內(nèi)核和一系列模塊組成,內(nèi)核提供web服務(wù)的基本功能,如啟用網(wǎng)絡(luò)協(xié)議,創(chuàng)建運(yùn)行環(huán)境,接收和分配客戶端請(qǐng)求,處理模塊之間的交互。Nginx 的模塊從結(jié)構(gòu)上分為核心模塊、基礎(chǔ)模塊和第三方模塊。
核心模塊: HTTP 模塊、EVENT 模塊和 MAIL 模塊
基礎(chǔ)模塊: HTTP Access 模塊、HTTP FastCGI 模塊、HTTP Proxy 模塊和 HTTP Rewrite 模塊
第三方模塊: HTTP Upstream Request Hash 模塊、Notice 模塊和 HTTP Access Key 模塊及用戶自己開發(fā)的模塊。
這樣的設(shè)計(jì)使 Nginx 方便開發(fā)和擴(kuò)展,Nginx的模塊默認(rèn)編譯進(jìn) nginx 中,如果需要增加或刪除模塊,需要重新編譯 nginx,這一點(diǎn)不如 Apache 的動(dòng)態(tài)加載模塊方便,最新版本 Nginx 已經(jīng)支持動(dòng)態(tài)模塊。