Nginx 反向代理與負(fù)載均衡

Nginx特點(diǎn):反向代理

正向代理
說(shuō)反向代理之前,我們先看看正向代理,正向代理也是大家最常接觸的到的代理模式,我們會(huì)從兩個(gè)方面來(lái)說(shuō)關(guān)于正向代理的處理模式,分別從軟件方面和生活方面來(lái)解釋一下什么叫正向代理。

在如今的網(wǎng)絡(luò)環(huán)境下,我們?nèi)绻捎诩夹g(shù)需要要去訪問(wèn)國(guó)外的某些網(wǎng)站,此時(shí)你會(huì)發(fā)現(xiàn)位于國(guó)外的某網(wǎng)站我們通過(guò)瀏覽器是沒(méi)有辦法訪問(wèn)的,此時(shí)大家可能都會(huì)用梯子進(jìn)行訪問(wèn),這種方式主要是找到一個(gè)可以訪問(wèn)國(guó)外網(wǎng)站的代理服務(wù)器,我們將請(qǐng)求發(fā)送給代理服務(wù)器,代理服務(wù)器去訪問(wèn)國(guó)外的網(wǎng)站,然后將訪問(wèn)到的數(shù)據(jù)傳遞給我們!

上述這樣的代理模式稱為正向代理,正向代理最大的特點(diǎn)是客戶端非常明確要訪問(wèn)的服務(wù)器地址;服務(wù)器只清楚請(qǐng)求來(lái)自哪個(gè)代理服務(wù)器,而不清楚來(lái)自哪個(gè)具體的客戶端;正向代理模式屏蔽或者隱藏了真實(shí)客戶端信息。


反向代理

明白了什么是正向代理,我們繼續(xù)看關(guān)于反向代理的處理方式,舉例如我大天朝的某寶網(wǎng)站,每天同時(shí)連接到網(wǎng)站的訪問(wèn)人數(shù)已經(jīng)爆表,單個(gè)服務(wù)器遠(yuǎn)遠(yuǎn)不能滿足人民日益增長(zhǎng)的購(gòu)買欲望了,此時(shí)就出現(xiàn)了一個(gè)大家耳熟能詳?shù)拿~:分布式部署;也就是通過(guò)部署多臺(tái)服務(wù)器來(lái)解決訪問(wèn)人數(shù)限制的問(wèn)題;某寶網(wǎng)站中大部分功能也是直接使用nginx進(jìn)行反向代理實(shí)現(xiàn)的,并且通過(guò)封裝nginx和其他的組件之后起了個(gè)高大上的名字:Tengine,有興趣的童鞋可以訪問(wèn)Tengine的官網(wǎng)查看具體的信息:http://tengine.taobao.org/。

簡(jiǎn)單來(lái)說(shuō):反向代理是指以代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器。

那么反向代理具體是通過(guò)什么樣的方式實(shí)現(xiàn)的分布式的集群操作呢,我們先看一個(gè)示意圖:


通過(guò)上述的圖解大家就可以看清楚了,多個(gè)客戶端給服務(wù)器發(fā)送的請(qǐng)求,nginx服務(wù)器接收到之后,按照一定的規(guī)則分發(fā)給了后端的業(yè)務(wù)處理服務(wù)器進(jìn)行處理了。此時(shí)~請(qǐng)求的來(lái)源也就是客戶端是明確的,但是請(qǐng)求具體由哪臺(tái)服務(wù)器處理的并不明確了,nginx扮演的就是一個(gè)反向代理角色。

反向代理,主要用于服務(wù)器集群分布式部署的情況下,反向代理隱藏了服務(wù)器的信息!
通常情況下,我們?cè)趯?shí)際項(xiàng)目操作時(shí),正向代理和反向代理很有可能會(huì)存在在一個(gè)應(yīng)用場(chǎng)景中,正向代理代理客戶端的請(qǐng)求去訪問(wèn)目標(biāo)服務(wù)器,目標(biāo)服務(wù)器是一個(gè)反向單利服務(wù)器,反向代理了多臺(tái)真實(shí)的業(yè)務(wù)處理服務(wù)器。具體的拓?fù)鋱D如下:

反向代理的作用

  • ①保護(hù)網(wǎng)站安全:任何來(lái)自Internet的請(qǐng)求都必須先經(jīng)過(guò)代理服務(wù)器;
  • ②通過(guò)配置緩存功能加速Web請(qǐng)求:可以緩存真實(shí)Web服務(wù)器上的某些靜態(tài)資源,減輕真實(shí)Web服務(wù)器的負(fù)載壓力;
  • ③實(shí)現(xiàn)負(fù)載均衡:充當(dāng)負(fù)載均衡服務(wù)器均衡地分發(fā)請(qǐng)求,平衡集群中各個(gè)服務(wù)器的負(fù)載壓力;

負(fù)載均衡

請(qǐng)求數(shù)量按照一定的規(guī)則進(jìn)行分發(fā)到不同的服務(wù)器處理的規(guī)則,就是一種均衡規(guī)則,將服務(wù)器接收到的請(qǐng)求按照規(guī)則分發(fā)的過(guò)程,稱為負(fù)載均衡。

負(fù)載均衡在實(shí)際項(xiàng)目操作過(guò)程中,有硬件負(fù)載均衡和軟件負(fù)載均衡兩種,硬件負(fù)載均衡也稱為硬負(fù)載,如F5負(fù)載均衡,相對(duì)造價(jià)昂貴成本較高,但是數(shù)據(jù)的穩(wěn)定性安全性等等有非常好的保障,如中國(guó)移動(dòng)中國(guó)聯(lián)通這樣的公司才會(huì)選擇硬負(fù)載進(jìn)行操作;更多的公司考慮到成本原因,會(huì)選擇使用軟件負(fù)載均衡,軟件負(fù)載均衡是利用現(xiàn)有的技術(shù)結(jié)合主機(jī)硬件實(shí)現(xiàn)的一種消息隊(duì)列分發(fā)機(jī)制。

nginx支持的負(fù)載均衡調(diào)度算法方式如下:

  • weight輪詢(默認(rèn)):接收到的請(qǐng)求按照順序逐一分配到不同的后端服務(wù)器,即使在使用過(guò)程中,某一臺(tái)后端服務(wù)器宕機(jī),nginx會(huì)自動(dòng)將該服務(wù)器剔除出隊(duì)列,請(qǐng)求受理情況不會(huì)受到任何影響。 這種方式下,可以給不同的后端服務(wù)器設(shè)置一個(gè)權(quán)重值(weight),用于調(diào)整不同的服務(wù)器上請(qǐng)求的分配率;權(quán)重?cái)?shù)據(jù)越大,被分配到請(qǐng)求的幾率越大;該權(quán)重值,主要是針對(duì)實(shí)際工作環(huán)境中不同的后端服務(wù)器硬件配置進(jìn)行調(diào)整的。
  • ip_hash:每個(gè)請(qǐng)求按照發(fā)起客戶端的ip的hash結(jié)果進(jìn)行匹配,這樣的算法下一個(gè)固定ip地址的客戶端總會(huì)訪問(wèn)到同一個(gè)后端服務(wù)器,這也在一定程度上解決了集群部署環(huán)境下session共享的問(wèn)題。
  • fair:智能調(diào)整調(diào)度算法,動(dòng)態(tài)的根據(jù)后端服務(wù)器的請(qǐng)求處理到響應(yīng)的時(shí)間進(jìn)行均衡分配,響應(yīng)時(shí)間短處理效率高的服務(wù)器分配到請(qǐng)求的概率高,響應(yīng)時(shí)間長(zhǎng)處理效率低的服務(wù)器分配到的請(qǐng)求少;結(jié)合了前兩者的優(yōu)點(diǎn)的一種調(diào)度算法。但是需要注意的是nginx默認(rèn)不支持fair算法,如果要使用這種調(diào)度算法,請(qǐng)安裝upstream_fair模塊。
  • url_hash:按照訪問(wèn)的url的hash結(jié)果分配請(qǐng)求,每個(gè)請(qǐng)求的url會(huì)指向后端固定的某個(gè)服務(wù)器,可以在nginx作為靜態(tài)服務(wù)器的情況下提高緩存效率。同樣要注意nginx默認(rèn)不支持這種調(diào)度算法,要使用的話需要安裝nginx的hash軟件包。

代碼演示

upstream user_hosts {
        server 118.89.106.129:80 weight=1;
        server 118.25.176.64:80 weight=5;
}

server {
  listen        80;
  server_name   qian.me www.qian.me;
  root          /usr/share/nginx/xhtml;
  index index.html index.htm;
  location / {    
        proxy_set_header Host www.54php.cn;
        proxy_pass http://user_hosts;
  }
}

1.客戶端訪問(wèn)qian.me的時(shí)候,反向代理服務(wù)器(118.25.176.64:80)通過(guò) proxy_set_header 將服務(wù)器(www.54php.cn)的資源返回給客戶端。

2.設(shè)置多個(gè)server實(shí)現(xiàn)負(fù)載均衡,如果不設(shè)置權(quán)中 weight 將以輪詢的方式調(diào)度服務(wù)器。

參考
圖解說(shuō)說(shuō) 正向代理、反向代理、透明代理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容