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