圖解正向代理、反向代理、透明代理

套用古龍武俠小說套路來說,代理服務技術是一門很古老的技術,是在互聯網早期出現就使用的技術。一般實現代理技術的方式就是在服務器上安裝代理服務軟件,讓其成爲一個代理服務器,從而實現代理技術。常用的代理技術分爲正向代理、反向代理和透明代理。本文就是針對這三種代理來講解一些基本原理和具體的適用範圍,便於大家更深入理解代理服務技術。

 


一、正向代理(Forward Proxy)

一般情況下,如果沒有特別說明,代理技術默認說的是正向代理技術。關於正向代理的概念如下: 正向代理(forward)是一個位於客戶端【用戶A】和原始服務器(origin server)【服務器B】之間的服務器【代理服務器Z】,爲了從原始服務器取得內容,用戶A向代理服務器Z發送一個請求並指定目標(服務器B),然後代理服務器Z向服務器B轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設置才能使用正向代理。如下圖1.1

這方面的內容現今使用的還是比較多的,例如一些公司採用ISA SERVER做爲正向代理服務器來授權用戶是否有權限訪問互聯網,挼下圖1.3 (圖1.3)圖1.3防火牆作爲網關,用來過濾外網對其的訪問。假設用戶A和用戶B都設置了代理服務器,用戶A允許訪問互聯網,而用戶B不允許訪問互聯網(這個在代理服務器Z上做限制)這樣用戶A因爲授權,可以通過代理服務器訪問到服務器B,而用戶B因爲沒有被代理服務器Z授權,所以訪問服務器B時,數據包會被直接丟棄。

5、隱藏訪問者的行蹤

如下圖1.4 我們可以看出服務器B並不知道訪問自己的實際是用戶A,因爲代理服務器Z代替用戶A去直接與服務器B進行交互。如果代理服務器Z被用戶A完全控制(或不完全控制),會慣以“肉雞”術語稱呼。 (圖1.4) 我們總結一下 正向代理是一個位於客戶端和原始服務器(origin server)之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),然後代理向原始服務器轉交請求並將獲得的內容返回給客戶端。客戶端必須設置正向代理服務器,當然前提是要知道正向代理服務器的IP地址,還有代理程序的端口。

二、反向代理(reverse proxy
反向代理正好與正向代理相反,對於客戶端而言代理服務器就像是原始服務器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接着反向代理將判斷向何處(原始服務器)轉交請求,並將獲得的內容返回給客戶端。 使用反向代理服務器的作用如下:
1、保護和隱藏原始資源服務器如下圖2.1

(圖1.1)



 

從上面的概念中,我們看出,文中所謂的正向代理就是代理服務器替代訪問方【用戶A】去訪問目標服務器【服務器B】



 

這就是正向代理的意義所在。而爲什麼要用代理服務器去代替訪問方【用戶A】去訪問服務器B呢?這就要從代理服務器使用的意義說起。



 

使用正向代理服務器作用主要有以下幾點:

 

1、訪問本無法訪問的服務器B,如下圖1.2


(圖1.2) 我們拋除複雜的網絡路由情節來看圖1.2,假設圖中路由器從左到右命名爲R1,R2假設最初用戶A要訪問服務器B需要經過R1和R2路由器這樣一個路由節點,如果路由器R1或者路由器R2發生故障,那麼就無法訪問服務器B了。但是如果用戶A讓代理服務器Z去代替自己訪問服務器B,由於代理服務器Z沒有在路由器R1或R2節點中,而是通過其它的路由節點訪問服務器B,那麼用戶A就可以得到服務器B的數據了。現實中的例子就是“***”。不過自從***技術被廣泛應用外,“***”不但使用了傳統的正向代理技術,有的還使用了***技術

2、加速訪問服務器B

這種說法目前不像以前那麼流行了,主要是帶寬流量的飛速發展。早期的正向代理中,很多人使用正向代理就是提速。還是如圖1.2 假設用戶A到服務器B,經過R1路由器和R2路由器,而R1R2路由器的鏈路是一個低帶寬鏈路。而用戶A到代理服務器Z,從代理服務器Z到服務器B都是高帶寬鏈路。那麼很顯然就可以加速訪問服務器B了。

3、Cache作用
Cache(緩存)技術和代理服務技術是緊密聯繫的(不光是正向代理,反向代理也使用了Cache(緩存)技術。還如上圖所示,如果在用戶A訪問服務器B某數據J之前,已經有人通過代理服務器Z訪問過服務器B上得數據J,那麼代理服務器Z會把數據J保存一段時間,如果有人正好取該數據J,那麼代理服務器Z不再訪問服務器B,而把緩存的數據J直接發給用戶A。這一技術在Cache中術語就叫Cache命中。如果有更多的像用戶A的用戶來訪問代理服務器Z,那麼這些用戶都可以直接從代理服務器Z中取得數據J,而不用千里迢迢的去服務器B下載數據了。
4、客戶端訪問授權
 

(圖2.1



 

用戶A始終認爲它訪問的是原始服務器B而不是代理服務器Z,但實用際上反向代理服務器接受用戶A的應答,從原始資源服務器B中取得用戶A的需求資源,然後發送給用戶A。由於防火牆的作用,只允許代理服務器Z訪問原始資源服務器B。儘管在這個虛擬的環境下,防火牆和反向代理的共同作用保護了原始資源服務器B,但用戶A並不知情。


2、負載均衡如下圖2.2

(圖2.2



 

 



 

當反向代理服務器不止一個的時候,我們甚至可以把它們做成集羣,當更多的用戶訪問資源服務器B的時候,讓不同的代理服務器Zx)去應答不同的用戶,然後發送不同用戶需要的資源。



 

當然反向代理服務器像正向代理服務器一樣擁有CACHE的作用,它可以緩存原始資源服務器B的資源,而不是每次都要向原始資源服務器B請求數據,特別是一些靜態的數據,比如圖片和文件,如果這些反向代理服務器能夠做到和用戶X來自同一個網絡,那麼用戶X訪問反向代理服務器X,就會得到很高質量的速度。這正是CDN技術的核心。如下圖2.3



 



 

(圖2.3



 

 



 

我們並不是講解CDN,所以去掉了CDN最關鍵的核心技術智能DNS。只是展示CDN技術實際上利用的正是反向代理原理這塊。



 

反向代理結論與正向代理正好相反,對於客戶端而言它就像是原始服務器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接着反向代理將判斷向何處(原始服務器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。


基本上,網上做正反向代理的程序很多,能做正向代理的軟件大部分也可以做反向代理。開源軟件中最流行的就是squid,既可以做正向代理,也有很多人用來做反向代理的前端服務器。另外MS ISA也可以用來在WINDOWS平臺下做正向代理。反向代理中最主要的實踐就是WEB服務,近些年來最火的就是Nginx了。網上有人說NGINX不能做正向代理,其實是不對的。NGINX也可以做正向代理,不過用的人比較少了。

三、透明代理

如果把正向代理、反向代理和透明代理按照人類血緣關係來劃分的話。那麼正向代理和透明代理是很明顯堂親關係,而正向代理和反向代理就是表親關係了
透明代理的意思是客戶端根本不需要知道有代理服務器的存在,它改編你的request fields(報文),並會傳送真實IP。注意,加密的透明代理則是屬於匿名代理,意思是不用設置使用代理了。 透明代理實踐的例子就是時下很多公司使用的行爲管理軟件。如下圖3.1(圖3.1

 

用戶A和用戶B並不知道行爲管理設備充當透明代理行爲,當用戶A或用戶B向服務器A或服務器B提交請求的時候,透明代理設備根據自身策略攔截並修改用戶AB的報文,並作爲實際的請求方,向服務器AB發送請求,當接收信息回傳,透明代理再根據自身的設置把允許的報文發回至用戶AB,如上圖,如果透明代理設置不允許訪問服務器B,那麼用戶A或者用戶B就不會得到服務器B的數據。

1.什麼是正向代理和正向代理服務器?

正向代理就是通常所說的代理,是某臺電腦通過一臺服務器來上Internet網的這種方式,其中這臺電腦就叫客戶機,這臺服務器就叫正向代理服務器也就是通常所說的代理服務器。在這種方式中,你是主動的,網站是被動的,網站那裏不能得到你的真實ip地址。(通俗講法)

正向代理服務器。它只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器(一般在IE-Internet選項-連接-局域網設置),並將本來要直接發送到Web服務器上的http請求發送到代理服務器中。

2.什麼是反向代理和反向代理服務器?

反向代理就是網站通過一臺服務器發佈到公網,供用戶訪問。用戶直接訪問那臺反向代理服務器,然後通過那臺服務器訪問到網站。用戶無法得到網站的真實IP地址。這樣就保護了網站服務器,如果您有臺服務器在國內又不想讓人找到IP,就可以在國外搭建一臺反向代理服務器。一個反向代理服務器將很多網站解析到同一ip地址上。(通俗講法)

技術講法,普通的Web代理服務器是不支持外部對內部網絡的訪問請求的。當一個代理服務器能夠代理外部網絡上的主機,訪問內部網絡時,這種代理服務的方式稱爲反向代理服務。此時的代理服務器稱爲反向代理服務器,對外表現爲一個Web服務器,外部網絡就可以簡單把它當作一個標準的Web服務器而不需要特定的配置。不同之處在於,這個服務器沒有保存任何網頁的真實數據,所有的靜態網頁或者CGI程序,都保存在內部的Web服務器上。因此對反向代理服務器的***並不會使得網頁信息遭到破壞,這樣就增強了Web服務器的安全性。

反向代理用於外部網絡訪問內部網絡時使用,正向代理用於提供內部網絡對外部網絡的訪問能力,並可以使用包過濾拒絕其他方式訪問外部網絡。

3.現在看一個實例。利用 squid 反向代理提高網站性能 [參考www.bitscn.com]

反向代理技術在提高網站訪問速度,增強網站可用性、安全性方面有很好的用途。可以利用 DNS 輪詢和 Squid 反向代理技術,實現了網站的負載均衡,從而提高了網站的可用性和可靠性。

反向代理服務器也稱爲WEB加速服務器,它位於WEB 服務器的前端,充當WEB 服務器的內容緩存器。來降低實際的WEB服務器的負載。系統結構如下圖

 

現在有許多大型的門戶網站如SINA 都採用squid 反向代理技術來加速網站的訪問速度,可將不同的 URL 請求分發到後臺不同的WEB 服務器上,同時互聯網用戶只能看到反向代理服務器的地址,加強了網站的訪問安全。

反向代理服務器是針對 WEB 服務器設置的,後臺 WEB 服務器對互聯網用戶是透明的,用戶只能看到反向代理服務器的地址,不清楚後臺 WEB 服務器是如何組織架構的。當互聯網用戶請求 WEB 服務時,DNS 將請求的域名解析爲反向代理服務器的 IP 地址,這樣 URL 請求將被髮送到反向代理服務器,由反向代理服務器負責處理用戶的請求與應答、與後臺 WEB 服務器交互。利用反向代理服務器減輕了後臺 WEB 服務器的負載,提高了訪問速度,同時避免了因用戶直接與 WEB 服務器通信帶來的安全隱患。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章