Nginx
是一款輕量的(相比 Apache
、Lighttpd
而言)、高性能的 HTTP
服務器,同時也能夠用做反向代理、負載平衡器和 HTTP
緩存。Nginx
採用了模塊化、事件驅動的架構設計,使用了異步非阻塞
的事件處理機制處理請求,使得在高負載下也能提供更可靠的性能。
nginx
Nginx
的內部結構是由核心部分和一系列的功能模塊所組成。Nginx Core
實現底層的通信協議,爲其餘模塊構建了基本的運行時環境,而且構建了其餘各模塊的協做基礎。除此以外,應用相關的功能都是在一系列的功能模塊中完成。算法
Nginx
將各功能模塊組織成一條鏈,當有請求到達的時候,請求依次通過這條鏈上的部分或者所有模塊進行處理。每一個模塊實現特定的功能,例如,實現對請求解壓縮的模塊,實現與上游服務器(upstream
模塊)進行通信的模塊,實現與 FastCGI
服務進行通信的模塊等等。後端
有兩個模塊比較特殊,他們居於 Nginx Core
和各功能模塊的中間,這兩個模塊就是 HTTP
模塊和 MAIL
模塊。它們用於處理與 HTTP 協議和 email 相關協議(SMTP/POP3/IMAP)有關的事件,而且確保這些事件能被以正確的順序來調用其餘的一些功能模塊。功能模塊分類:緩存
event module
:搭建了獨立於操做系統的事件處理機制的框架,及提供了各具體事件的處理phase handler
:主要負責處理客戶端請求併產生待響應內容output filter
:主要是負責對輸出的內容進行處理,例如,對輸出的圖片的 URL 進行替換之類的工做upstream
:實現負載均衡的功能load-balancer
:實現負載均衡的功能,經過特定的算法,在衆多的後端服務器中,選擇一個服務器出來做爲某個請求的轉發服務器
Nginx
程序在啓動後,會以守護進程的方式在系統後臺中運行,後臺進程包含一個 master
進程和多個 worker
進程。服務器
master 進程負責管理 Nginx 自己和其餘 worker 進程,包含:接收來自外界的信號、向各 worker 進程發送信號、監控 worker 進程的運行狀態、當 worker 進程退出後(異常狀況下),會自動從新啓動新的 worker 進程等。網絡
worker 進程主要處理基本的網絡事件,多個 worker 進程之間是對等的,他們同等競爭來自客戶端的請求,各進程互相之間是獨立的。一個請求,徹底由 worker 進程來處理,並且只在一個 worker 進程中處理。worker 進程的個數是能夠設置的,通常咱們會設置與機器 cpu 核數一致,這裏面的緣由與 Nginx 的進程模型以及事件處理模型是分不開的。架構
Nginx 的進程模型,能夠由下圖來表示:
負載均衡
nginx -h
—— Nginx 幫助命令nginx -s stop
—— 快速中止 Nginxnginx -s quit
—— 平滑中止 Nginxnginx -s reload
—— 重載配置文件(用新的配置文件啓動新 worker 進程,並平滑的關閉舊的 worker 進程)nginx -t
—— 檢測配置文件是否正確框架