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