說(shuō)明反向代理之前,得先明白什么是正向代理边灭,也就是代理殴瘦。
一:正向代理
正向代理示意圖1-0
正向代理類(lèi)似于一個(gè)跳板機(jī):
- 假設(shè)我們現(xiàn)在要訪問(wèn)谷歌的服務(wù)器,但是由于防火墻的原因我們無(wú)法直接訪問(wèn)唁桩,此時(shí)就需要一個(gè)可以訪問(wèn)谷歌的代理服務(wù)器碍岔,我們連接到代理服務(wù)器,告訴代理服務(wù)器我們需要那個(gè)無(wú)法訪問(wèn)的網(wǎng)站的內(nèi)容(目標(biāo)服務(wù)器)朵夏,代理服務(wù)器去取回后返回給我們蔼啦。從網(wǎng)站的角度,只在代理服務(wù)器來(lái)取內(nèi)容的時(shí)候有一次記錄仰猖,有時(shí)候并不知道是用戶的請(qǐng)求捏肢,也隱藏了用戶的資料,這取決于代理告不告訴網(wǎng)站饥侵。
- 正向代理 是一個(gè)位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器鸵赫,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)服務(wù)器躏升,然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶端辩棒。客戶端必須要進(jìn)行一些特別的設(shè)置才能使用正向代理。
- 正向代理實(shí)際上對(duì)目標(biāo)服務(wù)器是有感知的膨疏。
正向代理解決的問(wèn)題:
- 訪問(wèn)原來(lái)無(wú)法訪問(wèn)的資源一睁,如google
- 可以做緩存,加速訪問(wèn)資源
- 對(duì)客戶端訪問(wèn)授權(quán)佃却,上網(wǎng)進(jìn)行認(rèn)證(跳板機(jī))
- 代理可以記錄用戶訪問(wèn)記錄(上網(wǎng)行為管理)者吁,對(duì)外隱藏用戶信息
- 實(shí)際上正向代理中代理服務(wù)器是為了解決客戶端和服務(wù)器無(wú)法直接建立連接的問(wèn)題,而反向代理是則為了解決服務(wù)器響應(yīng)多個(gè)請(qǐng)求的時(shí)候負(fù)載太高的問(wèn)題饲帅。
二:反向代理
- 反向代理(Reverse Proxy)指代理服務(wù)器來(lái)接受internet上的連接請(qǐng)求复凳,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器瘤泪,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端。
- 對(duì)于客戶端而言育八,代理服務(wù)器就像是原始服務(wù)器对途,并且客戶端不需要進(jìn)行任何特別的設(shè)置∷杵澹客戶端向反向代理發(fā)送請(qǐng)求实檀,反向代理根據(jù)請(qǐng)求內(nèi)容判斷向何處(原始服務(wù)器)轉(zhuǎn)交請(qǐng)求,并將獲得的內(nèi)容返回給客戶端仲锄。
反向代理解決的問(wèn)題:
- 保護(hù)和隱藏原始資源服務(wù)器劲妙,保證內(nèi)網(wǎng)的安全湃鹊,例如可以使用反向代理提供WAF功能儒喊,阻止web攻擊
- 負(fù)載均衡,通過(guò)反向代理服務(wù)器來(lái)優(yōu)化網(wǎng)站的負(fù)載
三:對(duì)比
正向代理和反向代理的對(duì)比3-1
四:負(fù)載均衡
我們知道單臺(tái)服務(wù)器的性能是有上限的币呵,當(dāng)流量很大時(shí)怀愧,就需要使用多臺(tái)服務(wù)器來(lái)共同提供服務(wù),這就是所謂的集群余赢。
負(fù)載均衡服務(wù)器芯义,就是用來(lái)把經(jīng)過(guò)它的流量,按照某種方法妻柒,分配到集群中的各臺(tái)服務(wù)器上扛拨。這樣一來(lái)不僅可以承擔(dān)
更大的流量、降低服務(wù)的延遲举塔,還可以避免單點(diǎn)故障造成服務(wù)不可用绑警。
- Nginx負(fù)載均衡配置
http {
upstream cluster {
server srv1;
server srv2;
server srv3;
}
server {
listen 80;
location / {
proxy_pass http://cluster;
}
}
}
上述配置,Nginx會(huì)作為HTTP反向代理央渣,把訪問(wèn)本機(jī)的HTTP請(qǐng)求计盒,均分到后端集群的3臺(tái)服務(wù)器上。
此時(shí)使用的HTTP反向代理模塊是ngx_http_proxy_module芽丹。
在upstream配置塊中要指明使用的負(fù)載均衡算法北启,比如hash、ip_hash拔第、least_conn咕村。
這里沒(méi)有指定,所以使用了默認(rèn)的HTTP負(fù)載均衡算法 - 加權(quán)輪詢蚊俺。