轉(zhuǎn)載自圖解正向代理、反向代理胯陋、透明代理
套用古龍武俠小說套路來說蕊温,代理服務技術是一門很古老的技術,是在互聯(lián)網(wǎng)早期出現(xiàn)就使用的技術遏乔。一般實現(xiàn)代理技術的方式就是在服務器上安裝代理服務軟件义矛,讓其成為一個代理服務器,從而實現(xiàn)代理技術盟萨。常用的代理技術分為正向代理凉翻、反向代理和透明代理。本文就是針對這三種代理來講解一些基本原理和具體的適用范圍鸯旁,便于大家更深入理解代理服務技術噪矛。
一量蕊、正向代理(Forward Proxy)
一般情況下铺罢,如果沒有特別說明,代理技術默認說的是正向代理技術残炮。關于正向代理的概念如下:
正向代理(forward)是一個位于客戶端【用戶A】和原始服務器(origin server)【服務器B】之間的服務器【代理服務器Z】韭赘,為了從原始服務器取得內(nèi)容,用戶A向代理服務器Z發(fā)送一個請求并指定目標(服務器B)势就,然后代理服務器Z向服務器B轉(zhuǎn)交請求并將獲得的內(nèi)容返回給客戶端泉瞻。客戶端需要設置正向代理服務器,當然前提是要知道正向代理服務器的IP地址苞冯,還有代理程序的端口袖牙,才能使用正向代理
。如下圖1.1
從上面的概念中舅锄,我們看出鞭达,文中所謂的正向代理
就是代理服務器替代訪問方【用戶A】去訪問目標服務器【服務器B】
這就是正向代理的意義所在。而為什么要用代理服務器去代替訪問方【用戶A】去訪問服務器B呢皇忿?這就要從代理服務器使用的意義說起畴蹭。
使用正向代理服務器作用主要有以下幾點:
1、訪問本無法訪問的服務器B鳍烁,如下圖1.2
我們拋除復雜的網(wǎng)絡路由情節(jié)來看圖1.2叨襟,假設圖中路由器從左到右命名為R1,R2
假設最初用戶A要訪問服務器B需要經(jīng)過R1和R2路由器這樣一個路由節(jié)點,如果路由器R1或者路由器R2發(fā)生故障幔荒,那么就無法訪問服務器B了糊闽。但是如果用戶A讓代理服務器Z去代替自己訪問服務器B梳玫,由于代理服務器Z沒有在路由器R1或R2節(jié)點中,而是通過其它的路由節(jié)點訪問服務器B右犹,那么用戶A就可以得到服務器B的數(shù)據(jù)了汽纠。
現(xiàn)實中的例子就是“”。不過自從技術被廣泛應用外傀履,“”不但使用了傳統(tǒng)的正向代理技術虱朵,有的還使用了技術。
2钓账、加速訪問服務器B
這種說法目前不像以前那么流行了碴犬,主要是帶寬流量的飛速發(fā)展。早期的正向代理中梆暮,很多人使用正向代理就是提速服协。還是如圖1.2
假設用戶A到服務器B,經(jīng)過R1路由器和R2路由器啦粹,而R1到R2路由器的鏈路是一個低帶寬鏈路偿荷。而用戶A到代理服務器Z,從代理服務器Z到服務器B都是高帶寬鏈路唠椭。那么很顯然就可以加速訪問服務器B了跳纳。
3、Cache作用
Cache(緩存)技術和代理服務技術是緊密聯(lián)系的(不光是正向代理贪嫂,反向代理也使用了Cache(緩存)技術寺庄。還如上圖所示,如果在用戶A訪問服務器B某數(shù)據(jù)J之前力崇,已經(jīng)有人通過代理服務器Z訪問過服務器B上得數(shù)據(jù)J斗塘,那么代理服務器Z會把數(shù)據(jù)J保存一段時間,如果有人正好取該數(shù)據(jù)J亮靴,那么代理服務器Z不再訪問服務器B馍盟,而把緩存的數(shù)據(jù)J直接發(fā)給用戶A。這一技術在Cache中術語就叫Cache命中茧吊。如果有更多的像用戶A的用戶來訪問代理服務器Z贞岭,那么這些用戶都可以直接從代理服務器Z中取得數(shù)據(jù)J,而不用千里迢迢的去服務器B下載數(shù)據(jù)了饱狂。
4曹步、客戶端訪問授權
這方面的內(nèi)容現(xiàn)今使用的還是比較多的,例如一些公司采用ISA SERVER做為正向代理服務器來授權用戶是否有權限訪問互聯(lián)網(wǎng)休讳,挼下圖1.3
圖1.3防火墻作為網(wǎng)關讲婚,用來過濾外網(wǎng)對其的訪問。假設用戶A和用戶B都設置了代理服務器俊柔,用戶A允許訪問互聯(lián)網(wǎng)筹麸,而用戶B不允許訪問互聯(lián)網(wǎng)(這個在代理服務器Z上做限制)這樣用戶A因為授權活合,可以通過代理服務器訪問到服務器B,而用戶B因為沒有被代理服務器Z授權物赶,所以訪問服務器B時白指,數(shù)據(jù)包會被直接丟棄。
5酵紫、隱藏訪問者的行蹤
如下圖1.4 我們可以看出服務器B并不知道訪問自己的實際是用戶A告嘲,因為代理服務器Z代替用戶A去直接與服務器B進行交互。如果代理服務器Z被用戶A完全控制(或不完全控制)奖地,會慣以“肉雞”術語稱呼橄唬。
我們總結一下 正向代理是一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內(nèi)容参歹,客戶端向代理發(fā)送一個請求并指定目標(原始服務器)仰楚,然后代理向原始服務器轉(zhuǎn)交請求并將獲得的內(nèi)容返回給客戶端∪樱客戶端必須設置正向代理服務器僧界,當然前提是要知道正向代理服務器的IP地址,還有代理程序的端口臭挽。
二捂襟、反向代理(reverse proxy)
反向代理正好與正向代理相反,對于客戶端而言代理服務器就像是原始服務器埋哟,并且客戶端不需要進行任何特別的設置笆豁。客戶端向反向代理的命名空間(name-space)中的內(nèi)容發(fā)送普通請求赤赊,接著反向代理將判斷向何處(原始服務器)轉(zhuǎn)交請求,并將獲得的內(nèi)容返回給客戶端煞赢。
使用反向代理服務器的作用如下:
1抛计、 保護和隱藏原始資源服務器
如下圖2.1
用戶A始終認為它訪問的是原始服務器B而不是代理服務器Z,但實用際上反向代理服務器接受用戶A的應答照筑,從原始資源服務器B中取得用戶A的需求資源吹截,然后發(fā)送給用戶A。由于防火墻的作用凝危,只允許代理服務器Z訪問原始資源服務器B波俄。盡管在這個虛擬的環(huán)境下,防火墻和反向代理的共同作用保護了原始資源服務器B蛾默,但用戶A并不知情懦铺。
2、 負載均衡
如下圖2.2
當反向代理服務器不止一個的時候支鸡,我們甚至可以把它們做成集群冬念,當更多的用戶訪問資源服務器B的時候趁窃,讓不同的代理服務器Z(x)去應答不同的用戶,然后發(fā)送不同用戶需要的資源急前。
當然反向代理服務器像正向代理服務器一樣擁有CACHE的作用醒陆,它可以緩存原始資源服務器B的資源,而不是每次都要向原始資源服務器B請求數(shù)據(jù)裆针,特別是一些靜態(tài)的數(shù)據(jù)刨摩,比如圖片和文件,如果這些反向代理服務器能夠做到和用戶X來自同一個網(wǎng)絡世吨,那么用戶X訪問反向代理服務器X码邻,就會得到很高質(zhì)量的速度。這正是CDN技術的核心另假。如下圖2.3
我們并不是講解CDN像屋,所以去掉了CDN最關鍵的核心技術智能DNS。只是展示CDN技術實際上利用的正是反向代理原理這塊边篮。
反向代理結論與正向代理正好相反己莺,對于客戶端而言它就像是原始服務器,并且客戶端不需要進行任何特別的設置戈轿×枋埽客戶端向反向代理的命名空間(name-space)中的內(nèi)容發(fā)送普通請求,接著反向代理將判斷向何處(原始服務器)轉(zhuǎn)交請求思杯,并將獲得的內(nèi)容返回給客戶端胜蛉,就像這些內(nèi)容原本就是它自己的一樣。
基本上色乾,網(wǎng)上做正反向代理的程序很多誊册,能做正向代理的軟件大部分也可以做反向代理。開源軟件中最流行的就是squid暖璧,既可以做正向代理案怯,也有很多人用來做反向代理的前端服務器。另外MS ISA也可以用來在WINDOWS平臺下做正向代理澎办。反向代理中最主要的實踐就是WEB服務嘲碱,近些年來最火的就是Nginx了。網(wǎng)上有人說NGINX不能做正向代理局蚀,其實是不對的麦锯。NGINX也可以做正向代理,不過用的人比較少了琅绅。
下面一些對比說明便于更好的理解:
正向代理是客戶端配置扶欣,反向代理是服務器端配置。
正向代理中,proxy和client同屬一個LAN宵蛀,對server透明;
反向代理中昆著,proxy和server同屬一個LAN,對client透明术陶。
正向代理– 我代理幫我干活凑懂。(你發(fā)出去的 http 請求是完整的 url,由代理生成 http 請求頭)
反向代理– 我不知道幫我干活的是代理梧宫。(服務器自己的負載均衡服務器調(diào)度接谨,你不用管)
三、透明代理
如果把正向代理塘匣、反向代理和透明代理按照人類血緣關系來劃分的話脓豪。那么正向代理和透明代理是很明顯堂親關系,而正向代理和反向代理就是表親關系了忌卤。
透明代理的意思是客戶端根本不需要知道有代理服務器的存在扫夜,它改編你的request fields(報文),并會傳送真實IP驰徊。注意笤闯,加密的透明代理則是屬于匿名代理,意思是不用設置使用代理了棍厂。
透明代理實踐的例子就是時下很多公司使用的行為管理軟件颗味。如下圖3.1
用戶A和用戶B并不知道行為管理設備充當透明代理行為,當用戶A或用戶B向服務器A或服務器B提交請求的時候牺弹,透明代理設備根據(jù)自身策略攔截并修改用戶A或B的報文浦马,并作為實際的請求方,向服務器A或B發(fā)送請求张漂,當接收信息回傳晶默,透明代理再根據(jù)自身的設置把允許的報文發(fā)回至用戶A或B,如上圖鹃锈,如果透明代理設置不允許訪問服務器B荤胁,那么用戶A或者用戶B就不會得到服務器B的數(shù)據(jù)。