1. 程式人生 > >正向代理 & 反向代理模式 & 透明代理

正向代理 & 反向代理模式 & 透明代理

一、正向代理

正向代理(forward)是一個位於客戶端【使用者A】和原始伺服器(origin server)【伺服器B】之間的伺服器【代理伺服器Z】,為了從原始伺服器取得內容,使用者A向代理伺服器Z傳送一個請求並指定目標(伺服器B),然後代理伺服器Z向伺服器B轉交請求並將獲得的內容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向代理。 所謂的正向代理就是代理伺服器 替代訪問方【使用者A】去訪問目標伺服器【伺服器B】。 正向代理

二、反向代理

反向代理正好與正向代理相反,對於客戶端而言代理伺服器就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理的名稱空間 (name-space)中的內容傳送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端。

1) 保護和隱藏原始資源伺服器

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

2) 負載均衡

負載均衡 當反向代理伺服器不止一個的時候,我們甚至可以把它們做成叢集,當更多的使用者訪問資源伺服器B的時候,讓不同的代理伺服器Z(x)去應答不同的使用者,然後傳送不同使用者需要的資源。當然反向代理伺服器像正向代理伺服器一樣擁有CACHE的作用,它可以快取原始資源伺服器B的資源,而不是每次都要向原始資源伺服器B請求資料,特別是一些靜態的資料,比如圖片和檔案,如果這些反向代理伺服器能夠做到和使用者X來自同一個網路,那麼使用者X訪問反向代理伺服器X,就會得到很高質量的速度。這正是CDN技術的核心。如下圖: 在這裡插入圖片描述

我們並不是講解CDN,所以去掉了CDN最關鍵的核心技術智慧DNS。只是展示CDN技術實際上利用的正是反向代理原理這塊。反向代理結論與正向代理正好相反,對於客戶端而言它就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理的名稱空間(name-space)中的內容傳送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。 基本上,網上做正反向代理的程式很多,能做正向代理的軟體大部分也可以做反向代理。開源軟體中最流行的就是squid,既可以做正向代理,也有很多人用來做反向代理的前端伺服器。另外MS ISA也可以用來在WINDOWS平臺下做正向代理。反向代理中最主要的實踐就是WEB服務,近些年來最火的就是Nginx了。網上有人說NGINX不能做正向代理,其實是不對的。NGINX也可以做正向代理,不過用的人比較少了。

三、透明代理

如果把正向代理、反向代理和透明代理按照人類血緣關係來劃分的話。那麼正向代理和透明代理是很明顯堂親關係,而正向代理和反向代理就是表親關係了 。透明代理的意思是客戶端根本不需要知道有代理伺服器的存在,它改編你的request fields(報文),並會傳送真實IP。注意,加密的透明代理則是屬於匿名代理,意思是不用設定使用代理了。 透明代理實踐的例子就是時下很多公司使用的行為管理軟體。如下圖使用者A和使用者B並不知道行為管理裝置充當透明代理行為,當用戶A或使用者B向伺服器A或伺服器B提交請求的時候,透明代理裝置根據自身策略攔截並修改使用者A或B的報文,並作為實際的請求方,向伺服器A或B傳送請求,當接收資訊回傳,透明代理再根據自身的設定把允許的報文發回至使用者A或B,如下圖,如果透明代理設定不允許訪問伺服器B,那麼使用者A或者使用者B就不會得到伺服器B的資料。 透明代理