Nginx的誕生
俄羅斯工程師lgor Sysoev為Rambler Media工作期間使用C語言開發(fā)了Nginx英上。Nginx有以下特點(diǎn):
- 基于事件的驅(qū)動架構(gòu)城菊,使其可以支持?jǐn)?shù)以百萬級別的TCP連接
- 高度的模塊化和自由軟件許可證使得第三方模塊層出不窮
- Nginx是一個跨平臺的服務(wù)器配椭,可運(yùn)行在Linux,Windows晤锥,F(xiàn)reeBSD护桦,Solaris、AIX族奢、Mac OS等操作系統(tǒng)上
- 設(shè)計(jì)優(yōu)秀姥闭,性能穩(wěn)定
因?yàn)樯鲜龇N種優(yōu)點(diǎn)而使得Nginx大受歡迎!
Nginx的使用場景
什么是Nginx越走?
Nginx是一款自由棚品、開源、高性能的HTTP服務(wù)器和反向代理服務(wù)器廊敌,同時也是一個IMAP铜跑、POP3、SMTP代理服務(wù)器骡澈。Nginx不僅可以作為HTTP服務(wù)器發(fā)布網(wǎng)站锅纺,也可以作為反向代理服務(wù)器實(shí)現(xiàn)負(fù)載均衡。
正向代理
正向代理肋殴,代理的是客戶端囤锉,代客戶端發(fā)出請求。簡而言之就是一個位于客戶端和原始服務(wù)器之間的服務(wù)器护锤,客戶端向代理發(fā)送一個請求并指定原始服務(wù)器官地,然后代理向原始服務(wù)器轉(zhuǎn)交請求并將返回數(shù)據(jù)轉(zhuǎn)發(fā)給客戶端±优常客戶端需要進(jìn)行一些特別的設(shè)置才能使用正向代理驱入。
使用場景:
- 訪問原本無法訪問的資源,如外網(wǎng)
- 做緩存氯析,加速訪問資源
- 對客戶端訪問授權(quán)認(rèn)證
- 記錄用戶訪問記錄亏较,對外隱藏用戶信息
反向代理
反向代理,代理的是服務(wù)端掩缓,代服務(wù)端接收請求宴杀。簡而言之就是多個客戶端給服務(wù)端發(fā)送請求,Nginx收到之后按照一定規(guī)則分發(fā)給后端業(yè)務(wù)處理服務(wù)器進(jìn)行處理拾因。此時請求的客戶端是明確的旺罢,但是請求具體由哪臺服務(wù)器處理并不明確旷余,Nginx扮演的是一個反向代理角色。反向代理主要用于服務(wù)端集群分布式部署的情況下扁达,反向代理隱藏了服務(wù)器的信息正卧。
使用場景:
- 保證內(nèi)網(wǎng)安全,通常將反向代理作為公網(wǎng)訪問地址跪解,Web服務(wù)器則作為內(nèi)網(wǎng)
- 負(fù)載均衡炉旷,通過反向代理服務(wù)器來優(yōu)化網(wǎng)站負(fù)載
正向代理和反向代理的區(qū)別
在正向代理中,代理服務(wù)器和客戶端同屬于一個LAN叉讥,客戶端信息被隱藏窘行。
在反向代理中,代理服務(wù)器和客戶端同屬于一個LAN图仓,服務(wù)端信息被隱藏罐盔。
負(fù)載均衡
請求數(shù)量按照一定的規(guī)則進(jìn)行分發(fā)到不同的服務(wù)器處理的規(guī)則,就是一種負(fù)載均衡規(guī)則救崔,因此將服務(wù)器接收到的請求按照規(guī)則分發(fā)的過程惶看,稱為負(fù)載均衡。
負(fù)載均衡實(shí)際中分為硬件負(fù)載均衡和軟件負(fù)載均衡兩種六孵,硬件負(fù)載均衡也稱為硬負(fù)載纬黎,如F5負(fù)載均衡,相對造價昂貴成本較高劫窒,但是數(shù)據(jù)的穩(wěn)定性安全性等更好本今。軟件負(fù)載均衡是利用現(xiàn)有的技術(shù)結(jié)合主機(jī)硬件實(shí)現(xiàn)的一種消息隊(duì)列分發(fā)機(jī)制。
Nginx支持的負(fù)載均衡算法:
- weight輪詢(默認(rèn))
接收到的請求按照權(quán)重分配到不同的后端服務(wù)器主巍,即使在使用過程中冠息,某一臺后端服務(wù)器宕機(jī),Nginx會自動將該服務(wù)器剔除出隊(duì)列煤禽,請求受理情況不會受到任何影響。這種方式下岖赋,可以給不同的后端服務(wù)器設(shè)置一個權(quán)重值(weight)檬果,用于調(diào)整不同的服務(wù)器上請求的分配率,權(quán)重數(shù)據(jù)越大唐断,被分配到請求的幾率越大选脊。 - ip_hash(常用)
每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器脸甘,這在一定程度上解決了集群部署環(huán)境下session共享的問題恳啥。 - fair
智能調(diào)整調(diào)度算法,動態(tài)的根據(jù)后端服務(wù)器的請求處理到響應(yīng)的時間進(jìn)行均衡分配丹诀,響應(yīng)時間短處理效率高的服務(wù)器分配到請求的概率高钝的,響應(yīng)時間長處理效率低的服務(wù)器分配到的請求少翁垂,這種算法結(jié)合了前兩者的優(yōu)點(diǎn)。Nginx默認(rèn)不支持fair算法硝桩,如果要使用這種調(diào)度算法沿猜,必須安裝upstream_fair模塊。 - url_hash
按照訪問的url的hash結(jié)果分配請求碗脊,每個請求的url會指向后端固定的某個服務(wù)器啼肩,可以在Nginx作為靜態(tài)服務(wù)器的情況下提高緩存效率。Nginx默認(rèn)不支持這種調(diào)度算法衙伶,要使用的話必須安裝Nginx的hash軟件包祈坠。