一、Nginx 簡介
Nginx 是俄羅斯人編寫的十分輕量級的 HTTP 服務器,Nginx,它的發音爲“engine X”,是一個高性能的 HTTP 和反向代理服務器,同時也是一個 IMAP/POP3/SMTP 代理服務器。
Nginx 因爲它的穩定性、豐富的模塊庫、靈活的配置和低系統資源的消耗而聞名.業界一致認爲它是 Apache2.2+mod_proxy_balancer 的輕量級代替者,不僅是因爲響應靜態頁面的速度非常快,而且它的模塊數量達到 Apache 的近 2/3。對 proxy 和 rewrite 模塊的支持很徹底,還支持 mod_fcgi、ssl、vhosts ,適合用來做 mongrel clusters 的前端 HTTP 響應。
目前 Nginx 在國內很多大型企業都有應用,且普及率呈逐年上升趨勢。選擇 Nginx 的理由也很簡單:
第一,它可以支持 5W 高併發連接;
第二,內存消耗少;
第三,成本低。
Nginx 在架構中發揮的作用:
網關
---面向客戶的總入口。
虛擬主機
---一臺機器爲不同的域名/ip/端口提供服務
路由
---使用反向代理,整合後續服務爲一個完整業務
靜態服務器
---mvvm 模式中,用來發布前端 html/css/js/img
負載集羣
---使用 upstream,負載多個 tomcat
二、Nginx特點
與其他web服務器相比,Nginx特點:
1、速度快
nginx使用預讀、連接池、內存池等技術,使得單次HTTP請求速度更快。
2、擴展性好
Nginx的結構是“核心+模塊”的結構,Nginx本身就是一個Epool或Kqueue的事件處理和分發架構,後面會講到模塊知識。
3、高可靠性
Nginx的核心由一個任務很輕的管理進程(master進程)和若干工作進程(worker進程)組成。具體的HTTP請求在工作進程內負載均衡,如果某個工作進程異常終止了,管理進程會迅速重啓一個新的工作進程接替該進程。
4、低內存佔用
一般情況下,10000個非活躍HTTP保活連接僅佔用2.5MB內存。ngx_lua每擴展10000個連接也僅佔2.xMB內存。
5、高併發能力
部署在萬級以上的場合下。
Nginx全異步、非阻塞I/O的思想貫徹在覈心、模塊以及ngx_lua 模塊中,無論是自己實現的模塊,還是通過lua實現的腳本代碼,都是非阻塞的高速運行。
6、熱部署
由於Nginx的管理進程和工作進程是分開設計的,所以能夠實現熱部署功能。也就是系統不間斷的情況下升級可執行程序,更新配置文件,更新日誌。
7、開源
三、Nginx 架構設計
高度模塊化的設計是 Nginx 的架構基礎。Nginx 服務器被分解爲多個模塊,每個模塊就是
一個功能模塊,只負責自身的功能,模塊之間嚴格遵循“高內聚,低耦合”的原則。
Nginx 模塊圖
核心模塊
核心模塊是 Nginx 服務器正常運行必不可少的模塊,提供錯誤日誌記錄、配置文件解析、
事件驅動機制、進程管理等核心功能。
標準 HTTP 模塊
標準 HTTP 模塊提供 HTTP 協議解析相關的功能,如:端口配置、網頁編碼設置、HTTP
響應頭設置等。
可選 HTTP 模塊
可選 HTTP 模塊主要用於擴展標準的 HTTP 功能,讓 Nginx 能處理一些特殊的服務,如:
Flash 多媒體傳輸、解析 GeoIP 請求、SSL 支持等。
郵件服務模塊
郵件服務模塊主要用於支持 Nginx 的郵件服務,包括對 POP3 協議、IMAP 協議和
SMTP 協議的支持。
第三方模塊
第三方模塊是爲了擴展 Nginx 服務器應用,完成開發者自定義功能,如:Json 支持、Lua
支持等。