天天看點

如何學會了解正向代理、反向代理和透明代理

代理服務技術是一門很古老的技術,是在網際網路早期出現就使用的技術,一般實作代理技術的方式就是在伺服器上

安裝代理服務軟體,讓其成為一個代理伺服器,進而實作代理技術。常用代理技術有正向代理、反向代理和透明代理

一、正向代理

一般就是指在浏覽器上設定代理伺服器位址

如果沒有特别說明,代理技術預設說的是正向代理技術

關于正向代理的概念如下:

正向代理(forward)是一個位于用戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得内容

使用者向代理伺服器發送一個請求并指定目标,然後代理伺服器向伺服器轉交請求并将獲得的内容傳回給用戶端

用戶端必須要進行一些特别的設定才能使用正向代理。如下圖1.1

如何學會了解正向代理、反向代理和透明代理

從上面的概念中,我們看出,文中所謂的正向代理就是代理伺服器替代通路方去通路目标伺服器

這就是正向代理的意義所在。而為什麼要用代理伺服器去代替通路方去通路伺服器呢?

這就要從代理伺服器使用的意義說起。使用正向代理伺服器作用主要有以下幾點:

如何學會了解正向代理、反向代理和透明代理

我們抛除複雜的網絡路由情節來看圖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路由器,而R1到R2路由器的鍊路是一個低帶寬鍊路

而使用者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、用戶端通路授權

這方面的内容現今使用的還是比較多的

例如一些公司采用ISA SERVER做為正向代理伺服器來授權使用者是否有權限通路網際網路

如何學會了解正向代理、反向代理和透明代理

圖1.3防火牆作為網關,用來過濾外網對其的通路。假設使用者A和使用者B都設定了代理伺服器,使用者A允許通路網際網路

而使用者B不允許通路網際網路(這個在代理伺服器Z上做限制)這樣使用者A因為授權,可以通過代理伺服器通路到伺服器B,而使用者B因為沒有被代理伺服器Z授權,是以通路伺服器B時,資料包會被直接丢棄。

5、隐藏通路者的行蹤

如下圖1.4 我們可以看出伺服器B并不知道通路自己的實際是使用者A,因為代理伺服器Z代替使用者A去直接與伺服器B

進行互動。如果代理伺服器Z被使用者A完全控制(或不完全控制),會慣以“殭屍電腦”術語稱呼。

如何學會了解正向代理、反向代理和透明代理

我們總結一下 正向代理是一個位于用戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得内容

用戶端向代理發送一個請求并指定目标(原始伺服器),然後代理向原始伺服器轉交請求并将獲得的内容傳回給用戶端

用戶端必須設定正向代理伺服器,當然前提是要知道正向代理伺服器的IP位址,還有代理程式的端口。

二、反向代理(reverse proxy)

反向代理正好與正向代理相反,對于用戶端而言代理伺服器就像是原始伺服器,并且用戶端不需要進行任何特别的設定。用戶端向反向代理的命名空間(name-space)中的内容發送普通請求,接着反向代理将判斷向何處(原始伺服器)

轉交請求,并将獲得的内容傳回給用戶端。

反向代理伺服器放置在伺服器端,作為真實伺服器的代理者,保護了真實伺服器。

反向代理伺服器的工作流程

1)使用者通過域名發出通路 web 伺服器的請求,該域名被 DNS 伺服器解析為反向代理伺服器的

IP位址;

2)反向代理伺服器接受使用者的請求;

3)反向代理伺服器在本地緩存中查找請求的内容,找到後直接把内容發送給使用者;

4)如果本地緩存裡沒有使用者所請求的資訊内容,反向代理伺服器會代替使用者向源伺服器請求同樣的資訊内容

      并把資訊内容發給使用者,如果資訊内容是緩存的還會把它儲存到緩存中。

使用反向代理伺服器的作用如下:

1、保護和隐藏原始資源伺服器

如下圖2.1

如何學會了解正向代理、反向代理和透明代理

使用者A始終認為它通路的是原始伺服器B而不是代理伺服器Z,但實用際上反向代理伺服器接受使用者A的應答,從原始資源伺服器B中取得使用者A的需求資源,然後發送給使用者A。由于防火牆的作用,隻允許代理伺服器Z通路原始資源伺服器B。盡管在這個虛拟的環境下,防火牆和反向代理的共同作用保護了原始資源伺服器B,但使用者A并不知情。

2、負載均衡

如下圖2.2

如何學會了解正向代理、反向代理和透明代理

當反向代理伺服器不止一個的時候,我們甚至可以把它們做成叢集,當更多的使用者通路資源伺服器B的時候,讓不同的代理伺服器Z(x)去應答不同的使用者,然後發送不同使用者需要的資源。當然反向代理伺服器像正向代理伺服器一樣擁有CACHE的作用,它可以緩存原始資源伺服器B的資源,而不是每次都要向原始資源伺服器B請求資料,特别是一些靜态的資料,比如圖檔和檔案,如果這些反向代理伺服器能夠做到和使用者X來自同一個網絡,那麼使用者X通路反向代理伺服器X,就會得到很高品質的速度。這正是CDN技術的核心。如下圖2.3

如何學會了解正向代理、反向代理和透明代理

我們并不是講解CDN,是以去掉了CDN最關鍵的核心技術智能DNS。隻是展示CDN技術實際上利用的正是反向代理原理這塊。反向代理結論與正向代理正好相反,對于用戶端而言它就像是原始伺服器,并且用戶端不需要進行任何特别的設定。用戶端向反向代理的命名空間(name-space)中的内容發送普通請求,接着反向代理将判斷向何處(原始伺服器)轉交請求,并将獲得的内容傳回給用戶端,就像這些内容原本就是它自己的一樣

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

三、透明代理

如果把正向代理、反向代理和透明代理按照人類血緣關系來劃分的話

那麼正向代理和透明代理是很明顯堂親關系,而正向代理和反向代理就是表親關系了

透明代理的意思是用戶端根本不需要知道有代理伺服器的存在,它改編你的request fields(封包)

并會傳送真實IP。注意,加密的透明代理則是屬于匿名代理,意思是不用設定使用代理了

透明代理的意思就是說,對于使用者而言,不需要在浏覽器上設定任何代理伺服器位址

通路真實伺服器的時候就好像沒有代理伺服器存在。這個是怎麼實作呢?

其中一種方案就是在客戶機的網關上做文章,甚至客戶機的網關就可以是一台透明代理伺服器

大家都知道,客戶機的所有流量必定會流向網關

假設網關是一台Linux主機,在linux上啟動透明代理,端口為8080,那麼在linux設定iptable NAT

iptables -t nat -A PREROUTING -p tcp --dport 80 -jREDIRECT --to-ports 8080

這樣經過linux主機的tcp 80端口的流量全部被重定向到了本機的8080端口

在這裡其實nat的重定向功能實作了透明代理的裡面對于使用者透明的功能

透明代理實踐的例子就是時下很多公司使用的行為管理軟體。如下圖3.1

如何學會了解正向代理、反向代理和透明代理

使用者A和使用者B并不知道行為管理裝置充當透明代理行為,當使用者A或使用者B向伺服器A或伺服器B送出請求的時候

透明代理裝置根據自身政策攔截并修改使用者A或B的封包,并作為實際的請求方,向伺服器A或B發送請求

當接收資訊回傳,透明代理再根據自身的設定把允許的封包發回至使用者A或B

如上圖,如果透明代理設定不允許通路伺服器B,那麼使用者A或者使用者B就不會得到伺服器B的資料