亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Nginx 介紹

什么是 Nginx?

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

為什么要使用 Nginx?

Nginx 最重要的功能是反向代理和負載均衡,反向代理將允許我們在端口 80 上托管多個域名,同時使用不同的語言編寫后端服務,負載均衡可以把多個提供相同功能的后端服務配置成彼此冗余。

Nginx 負責訪問日志、黑名單、負載平衡和提供靜態(tài)文件訪問,后臺 Web 服務則可專注于業(yè)務邏輯處理,Nginx 是動靜分離架構的入口程序。

Nginx 支持高并發(fā),內(nèi)存占用小。

Nginx 支持配置文件動態(tài)修改。

Nginx 是如何工作的?

Nginx進程

nginx 在啟動后,會以 daemon 的方式在后臺運行,后臺進程包含一個 master 進程和多個 worker 進程,worker 進程以非 root 用戶運行,可以在配置文件中配置運行 worker 進程的用戶。

master 進程主要用來管理 worker 進程,包含:接收來自外界的信號,向各 worker 進程發(fā)送信號,監(jiān)控 worker 進程的運行狀態(tài),當 worker 進程退出后(異常情況下),會自動重新啟動新的 worker 進程。

worker 進程則是處理基本的網(wǎng)絡事件。多個 worker 進程之間是對等的,他們同等競爭來自客戶端的請求,各進程互相之間是獨立的。一個請求,只可能在一個 worker 進程中處理,一個 worker 進程,不可能處理其它進程的請求。

總結其主要功能分別如下:

主進程(master process)的功能:

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

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

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


master 進程:負責加載和分析配置文件、管理 worker 進程,平滑升級
worker 進程:接收客戶端請求、將請求一次送入各模塊過濾、I/O 調(diào)用、數(shù)據(jù)緩存、發(fā)送響應
cache相關進程:cache loader (緩存索引重建)與 cache manager( 緩存索引管理)組成
--Cache loader 在 Nginx 服務啟動后由主進程生成,根據(jù)本地磁盤上緩存建立索引元數(shù)據(jù)庫后退出。
--Cache manager 在元數(shù)據(jù)更新完成后,對元數(shù)據(jù)是否過期做出判斷。

Nginx的模塊結構

Nginx 的各種功能和操作都由模塊來實現(xiàn)。Nginx 由內(nèi)核和一系列模塊組成,內(nèi)核提供web服務的基本功能,如啟用網(wǎng)絡協(xié)議,創(chuàng)建運行環(huán)境,接收和分配客戶端請求,處理模塊之間的交互。Nginx 的模塊從結構上分為核心模塊、基礎模塊和第三方模塊。 

核心模塊: HTTP 模塊、EVENT 模塊和 MAIL 模塊 

基礎模塊: HTTP Access 模塊、HTTP FastCGI 模塊、HTTP Proxy 模塊和 HTTP Rewrite 模塊 

第三方模塊: HTTP Upstream Request Hash 模塊、Notice 模塊和 HTTP Access Key 模塊及用戶自己開發(fā)的模塊。

這樣的設計使 Nginx 方便開發(fā)和擴展,Nginx的模塊默認編譯進 nginx 中,如果需要增加或刪除模塊,需要重新編譯 nginx,這一點不如 Apache 的動態(tài)加載模塊方便,最新版本 Nginx 已經(jīng)支持動態(tài)模塊。