Nginx 介紹

什么是 Nginx?

  • Nginx 讀作 “engine-ex”。
  • Nginx 是由俄羅斯程序員 Igor Sysoev 編寫,2004年10月作為一個(gè)試圖回答公眾發(fā)布 C10K 問題。其中 C10k 是同時(shí)管理 10,000 個(gè)連接的挑戰(zhàn)。Nginx 采用了事件驅(qū)動(dòng)和異步架構(gòu),此設(shè)計(jì)使 Nginx 成為可擴(kuò)展、高性能的服務(wù)器。
  • 它是一個(gè)開源、輕量級(jí)和高性能的 Web 服務(wù)器,也用作 HTTP、HTTPS、SMTP、IMAP、POP3 協(xié)議的反向代理服務(wù)器,另一方面,它也用作 IMAP、POP3 和 IMAP 的 HTTP 負(fù)載均衡器、HTTP 緩存和電子郵件代理。
  • 簡(jiǎn)而言之,我們可以說 Nginx 是一種用于處理并發(fā)請(qǐng)求的軟件。

為什么要使用 Nginx?

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 是如何工作的?

Nginx進(jìn)程

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)的功能:

  1. 讀取 Nginx 配置文件并驗(yàn)證其有效性和正確性
  2. 按照配置啟動(dòng)、管理和關(guān)閉工作進(jìn)程
  3. 接受外界指令,比如重啟、升級(jí)及關(guān)閉服務(wù)器等指令
  4. 不中斷服務(wù),實(shí)現(xiàn)平滑升級(jí),重啟服務(wù)并應(yīng)用新的配置
  5. 開啟日志文件

工作進(jìn)程(woker process)的功能:

  1. 接收處理客戶端的請(qǐng)求
  2. 將請(qǐng)求以此送入各個(gè)功能模塊進(jìn)行處理
  3. IO 調(diào)用,獲取響應(yīng)數(shù)據(jù)
  4. 與后端服務(wù)器通信,接收后端服務(wù)器的處理結(jié)果
  5. 緩存數(shù)據(jù),訪問緩存索引,查詢和調(diào)用緩存數(shù)據(jù)
  6. 發(fā)送請(qǐng)求結(jié)果,響應(yīng)客戶端的請(qǐng)求
  7. 接收主程序指令,比如重啟、升級(jí)和退出等


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的模塊結(jié)構(gòu)

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)模塊。


丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清