一.代理
代理,也稱為網(wǎng)絡(luò)代理,是一種特殊的網(wǎng)絡(luò)服務(wù),允許一個(gè)網(wǎng)絡(luò)終端(一般為客戶端)通過(guò)這個(gè)服務(wù)與另一個(gè)網(wǎng)絡(luò)終端(一般為服務(wù)器)進(jìn)行非直接的連接。一些網(wǎng)關(guān)、路由器等網(wǎng)絡(luò)設(shè)備具備網(wǎng)絡(luò)代理功能。一般認(rèn)為代理服務(wù)有利于保障網(wǎng)絡(luò)終端的隱私或安全,防止攻擊。提供代理服務(wù)的電腦系統(tǒng)或其它類型的網(wǎng)絡(luò)終端稱為代理服務(wù)器(英文:Proxy Server)
我們打個(gè)比方,比如說(shuō)你要臺(tái)電視機(jī),這個(gè)時(shí)候你要么去商場(chǎng)買,要么去狗站或者是貓站上買,當(dāng)然你也可以直接從電視機(jī)生產(chǎn)廠商那邊直接購(gòu)買。在你購(gòu)買電視機(jī)的這個(gè)過(guò)程中,你,就是所謂的客戶端,購(gòu)買電視機(jī)就是向服務(wù)端發(fā)送請(qǐng)求,而電視機(jī)生產(chǎn)廠商就是我們所要請(qǐng)求的目的服務(wù)器,在這個(gè)過(guò)程中商場(chǎng),狗站,貓站則起到一個(gè)代理作用,這個(gè)時(shí)候我們稱之為代理服務(wù)器。
具體而言,代理服務(wù)器一般可以分為正向代理和反向代理。
正向代理和反向的代理參考圖(圖片來(lái)自于網(wǎng)絡(luò))。
二.正向代理
正向代理就是一個(gè)位于客戶端和原始服務(wù)器(origin server)之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶端向代理發(fā)送一個(gè)請(qǐng)求并指定目標(biāo)(原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶端。一般來(lái)說(shuō)正向代理是客戶端使用的。在請(qǐng)求過(guò)程中,正向代理隱藏了真實(shí)請(qǐng)求的客戶端。也就是說(shuō)你通過(guò)正向代理向我發(fā)送請(qǐng)求,我不知道是你發(fā)送的。
同樣,我們也來(lái)打一個(gè)比方,你讓你兒子去超市給你買包辣條,然后你兒子跑到超市給你買了包辣條回來(lái)了,在買辣條的這個(gè)過(guò)程中,你兒子就起到一個(gè)正向代理的過(guò)程,而超市就是你要請(qǐng)求的服務(wù)器,你就是客戶端,而買辣條這個(gè)行為則是你的請(qǐng)求行為。當(dāng)然假如說(shuō)超市的售貨人員不認(rèn)識(shí)你兒子,更不認(rèn)識(shí)你。所以在整個(gè)購(gòu)買辣條的過(guò)程中,超市不知道實(shí)際買辣條的人是你,但是超市以為是你兒子買的辣條。這個(gè)過(guò)程我想就應(yīng)該比叫容易理解了。
三.反向代理
反向代理(Reverse Proxy)方式是指以代理服務(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ù)器。
我們舉個(gè)例子,比如說(shuō)你買了新房子,房子需要裝修,這個(gè)時(shí)候你需要地暖,燈飾,沙發(fā)等等,你只需要將這些事情交給裝修公司,等待最后給你裝修出來(lái)的結(jié)果就行了(這個(gè)例子可能有點(diǎn)不是很恰當(dāng))。在這個(gè)過(guò)程中,裝修公司所起到的作用就是類似于反向代理,你就是所所謂的請(qǐng)求客戶端,而那些家具的供應(yīng)商,則是這個(gè)過(guò)程中額真實(shí)服務(wù)器。
在整個(gè)過(guò)程中,其實(shí)是裝修公司和供應(yīng)商進(jìn)行暗中勾結(jié),你根本不知道你訪問(wèn)的是哪個(gè)服務(wù)器,這樣就能夠保證服務(wù)器的安全性
四.各自的優(yōu)缺點(diǎn)以及用途
正向代理是從訪問(wèn)者出發(fā),在訪問(wèn)的過(guò)程中隱藏了訪問(wèn)者的真實(shí)IP,因此你可通過(guò)正向代理來(lái)進(jìn)行隱藏你自己的真實(shí)IP。但是這也同樣會(huì)有一個(gè)問(wèn)題,就是對(duì)我們的網(wǎng)警叔叔們?cè)斐闪撕艽蟮睦щy。
反向代理同正向代理相反,可以隱藏我們真實(shí)服務(wù)器的一些信息,并且可以在服務(wù)端進(jìn)行一些配置,僅僅允許代理服務(wù)器進(jìn)行代理訪問(wèn),這樣就能夠起到一定的防護(hù)作用。假如說(shuō)有黑客黑進(jìn)了你的服務(wù)器(其實(shí)是代理服務(wù)器)他們也找不到可以修改的東西。
因?yàn)樵诜聪虼硎谴嬖谟诜?wù)端的,我們的第每一次請(qǐng)求都是先到達(dá)反向代理服務(wù)器,再通過(guò)反向代理服務(wù)器進(jìn)行資源的分發(fā), 因此,可以在反向代理服務(wù)器端進(jìn)行負(fù)載均衡,以及資源的分發(fā)。這個(gè)其實(shí)可以參考CDN的基本實(shí)現(xiàn),CDN的本質(zhì)上是使用了反向代理的技術(shù)的。另外,在使用反向代理技術(shù)的過(guò)程中,可以對(duì)服務(wù)器端的某些不經(jīng)常變得資源進(jìn)行適當(dāng)?shù)木彺妫粶p少對(duì)服務(wù)器端的請(qǐng)求,并且極大的減少了服務(wù)器端的IO,從而加快了訪問(wèn)速度。
對(duì)于反向代理還有另外的一個(gè)用途就是作為防火墻。反向代理可以配置防火墻路由器,使其只允許特定端口特定的服務(wù)器進(jìn)行訪問(wèn),而不允許其他的機(jī)子進(jìn)行輸入或者是輸出,從而實(shí)現(xiàn)防火墻的作用。
說(shuō)白了,反向代理的主要用途就兩個(gè),一個(gè)是提高訪問(wèn)速度,另外一個(gè)就是作為防火墻。
反向代理也不是說(shuō)完全沒(méi)有缺點(diǎn),反向代理的缺點(diǎn)主要表現(xiàn)在以下兩個(gè)方面:
- 反向代理是處于OSI參考模型第七層應(yīng)用的,所以就必須為每一種應(yīng)用服務(wù)專門開(kāi)發(fā)一個(gè)反向代理服務(wù)器,這樣就限制了反向代理負(fù)載均衡技術(shù)的應(yīng)用范圍,現(xiàn)在一般都用于對(duì)web服務(wù)器的負(fù)載均衡。
- 針對(duì)每一次代理,代理服務(wù)器就必須打開(kāi)兩個(gè)連接,一個(gè)對(duì)外,一個(gè)對(duì)內(nèi),因此在并發(fā)連接請(qǐng)求數(shù)量非常大的時(shí)候,代理服務(wù)器的負(fù)載也就非常大了,在最后代理服務(wù)器本身會(huì)成為服務(wù)的瓶頸。
一般來(lái)講,可以用它來(lái)對(duì)連接數(shù)量不是特別大,但每次連接都需要消耗大量處理資源的站點(diǎn)進(jìn)行負(fù)載均衡。