標籤:
上面的答案都說的很好,我畫了張圖能更直觀地解釋為何反向 Proxy叫“反向“代理<img src="https://pic1.zhimg.com/480c1c45d2565e2f92fd930d25b73a18_b.jpg" data-rawwidth="522" data-rawheight="660" class="origin_image zh-lightbox-thumb" width="522" data-original="https://pic1.zhimg.com/480c1c45d2565e2f92fd930d25b73a18_r.jpg">正向 Proxy中,proxy和client同屬一個LAN,對server透明;正向 Proxy中,proxy和client同屬一個LAN,對server透明; 反向 Proxy中,proxy和server同屬一個LAN,對client透明。 實際上proxy在兩種代理中做的事都是代為收發請求和響應,不過從結構上來看正好左右互換了下,所以把後出現的那種代理方式叫成了反向 Proxy。
阿笠碩士 連結:https://www.zhihu.com/question/24723688/answer/48369770 來源:知乎 著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。
http://z00w00.blog.51cto.com/515114/1031287
套用古龍武俠小說套路來說,代理服務技術是一門很古老的技術,是在互連網早期出現就使用的技術。一般實現代理技術的方式就是在伺服器上安裝代理服務軟體,讓其成為一個Proxy 伺服器,從而實現代理技術。常用的代理技術分為正向 Proxy、反向 Proxy和透明代理。本文就是針對這三種代理來講解一些基本原理和具體的適用範圍,便於大家更深入理解代理服務技術。一、正向 Proxy(Forward Proxy) 一般情況下,如果沒有特別說明,代理技術預設說的是正向 Proxy技術。關於正向 Proxy的概念如下:正向 Proxy(forward)是一個位於用戶端【使用者A】和原始伺服器(origin server)【伺服器B】之間的伺服器【Proxy 伺服器Z】,為了從原始伺服器取得內容,使用者A向Proxy 伺服器Z發送一個請求並指定目標(伺服器B),然後Proxy 伺服器Z向伺服器B轉交請求並將獲得的內容返回給用戶端。用戶端必須要進行一些特別的設定才能使用正向 Proxy。如1.1 (圖1.1)從上面的概念中,我們看出,文中所謂的正向 Proxy就是Proxy 伺服器替代訪問方【使用者A】去訪問目標伺服器【伺服器B】這就是正向 Proxy的意義所在。而為什麼要用Proxy 伺服器去代替訪問方【使用者A】去訪問伺服器B呢?這就要從Proxy 伺服器使用的意義說起。使用正向 Proxy伺服器作用主要有以下幾點:1、訪問本無法訪問的伺服器B,如1.2 (圖1.2) 我們拋除複雜的網路路由情節來看圖1.2,假設圖中路由器從左至右命名為R1,R2假設最初使用者A要訪問伺服器B需要經過R1和R2路由器這樣一個路由節點,如果路由器R1或者路由器R2發生故障,那麼就無法訪問伺服器B了。但是如果使用者A讓Proxy 伺服器Z去代替自己訪問伺服器B,由於Proxy 伺服器Z沒有在路由器R1或R2節點中,而是通過其它的路由節點訪問伺服器B,那麼使用者A就可以得到伺服器B的資料了。現實中的例子就是“FQ”。不過自從VPN技術被廣泛應用外,“FQ”不但使用了傳統的正向 Proxy技術,有的還使用了VPN技術。 2、加速訪問伺服器B這種說法目前不像以前那麼流行了,主要是頻寬流量的飛速發展。早期的正向 Proxy中,很多人使用正向 Proxy就是提速。還是1.2假設使用者A到伺服器B,經過R1路由器和R2路由器,而R1到R2路由器的鏈路是一個低頻寬鏈路。而使用者A到Proxy 伺服器Z,從Proxy 伺服器Z到伺服器B都是高頻寬鏈路。那麼很顯然就可以加速訪問伺服器B了。 3、Cache作用Cache(緩衝)技術和代理服務技術是緊密聯絡的(不光是正向 Proxy,反向 Proxy也使用了Cache(緩衝)技術。還如所示,如果在使用者A訪問伺服器B某資料J之前,已經有人通過Proxy 伺服器Z訪問過伺服器B上得資料J,那麼Proxy 伺服器Z會把資料J儲存一段時間,如果有人正好取該資料J,那麼Proxy 伺服器Z不再訪問伺服器B,而把緩衝的資料J直接發給使用者A。這一技術在Cache中術語就叫Cache命中。如果有更多的像使用者A的使用者來訪問Proxy 伺服器Z,那麼這些使用者都可以直接從Proxy 伺服器Z中取得資料J,而不用千裡迢迢的去伺服器B下載資料了。 4、用戶端訪問授權這方面的內容現今使用的還是比較多的,例如一些公司採用ISA SERVER做為正向 Proxy伺服器來授權使用者是否有許可權訪問互連網,挼1.3 (圖1.3)圖1.3防火牆作為網關,用來過濾外網對其的訪問。假設使用者A和使用者B都設定了Proxy 伺服器,使用者A允許訪問互連網,而使用者B不允許訪問互連網(這個在Proxy 伺服器Z上做限制)這樣使用者A因為授權,可以通過Proxy 伺服器訪問到伺服器B,而使用者B因為沒有被Proxy 伺服器Z授權,所以訪問伺服器B時,資料包會被直接丟棄。5、隱藏訪問者的行蹤如1.4 我們可以看出伺服器B並不知道訪問自己的實際是使用者A,因為Proxy 伺服器Z代替使用者A去直接與伺服器B進行互動。如果Proxy 伺服器Z被使用者A完全控制(或不完全控制),會慣以“肉雞”術語稱呼。 (圖1.4) 我們總結一下 正向 Proxy是一個位於用戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,用戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內容返回給用戶端。用戶端必須設定正向 Proxy伺服器,當然前提是要知道正向 Proxy伺服器的IP地址,還有代理程式的連接埠。 二、反向 Proxy(reverse proxy)反向 Proxy正好與正向 Proxy相反,對於用戶端而言Proxy 伺服器就像是原始伺服器,並且用戶端不需要進行任何特別的設定。用戶端向反向 Proxy的命名空間(name-space)中的內容發送普通請求,接著反向 Proxy將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給用戶端。使用反向 Proxy伺服器的作用如下:1、 保護和隱藏原始資原始伺服器如2.1 (圖2.1)使用者A始終認為它訪問的是原始伺服器B而不是Proxy 伺服器Z,但實用際上反向 Proxy伺服器接受使用者A的應答,從原始資原始伺服器B中取得使用者A的需求資源,然後發送給使用者A。由於防火牆的作用,只允許Proxy 伺服器Z訪問原始資原始伺服器B。儘管在這個虛擬環境下,防火牆和反向 Proxy的共同作用保護了原始資原始伺服器B,但使用者A並不知情。2、 負載平衡如2.2 (圖2.2) 當反向 Proxy伺服器不止一個的時候,我們甚至可以把它們做成叢集,當更多的使用者訪問資原始伺服器B的時候,讓不同的Proxy 伺服器Z(x)去應答不同的使用者,然後發送不同使用者需要的資源。 當然反向 Proxy伺服器像正向 Proxy伺服器一樣擁有CACHE的作用,它可以緩衝原始資原始伺服器B的資源,而不是每次都要向原始資原始伺服器B請求資料,特別是一些靜態資料,比片和檔案,如果這些反向 Proxy伺服器能夠做到和使用者X來自同一個網路,那麼使用者X訪問反向 Proxy伺服器X,就會得到很高品質的速度。這正是CDN技術的核心。如2.3 (圖2.3) 我們並不是講解CDN,所以去掉了CDN最關鍵的核心技術智能DNS。只是展示CDN技術實際上利用的正是反向 Proxy原理這塊。 反向 Proxy結論與正向 Proxy正好相反,對於用戶端而言它就像是原始伺服器,並且用戶端不需要進行任何特別的設定。用戶端向反向 Proxy的命名空間(name-space)中的內容發送普通請求,接著反向 Proxy將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給用戶端,就像這些內容原本就是它自己的一樣。 基本上,網上做正反向 Proxy的程式很多,能做正向 Proxy的軟體大部分也可以做反向 Proxy。開源軟體中最流行的就是squid,既可以做正向 Proxy,也有很多人用來做反向 Proxy的前端伺服器。另外MS ISA也可以用來在WINDOWS平台下做正向 Proxy。反向 Proxy中最主要的實踐就是WEB服務,近些年來最火的就是Nginx了。網上有人說NGINX不能做正向 Proxy,其實是不對的。NGINX也可以做正向 Proxy,不過用的人比較少了。 三、透明代理 如果把正向 Proxy、反向 Proxy和透明代理按照人類血緣關係來劃分的話。那麼正向 Proxy和透明代理是很明顯堂親關係,而正向 Proxy和反向 Proxy就是表親關係了。 透明代理的意思是用戶端根本不需要知道有Proxy 伺服器的存在,它改編你的request fields(報文),並會傳送真實IP。注意,加密的透明代理則是屬於匿名代理,意思是不用設定使用代理了。 透明代理實踐的例子就是時下很多公司使用的行為管理軟體。如3.1 (圖3.1) 使用者A和使用者B並不知道行為管理裝置充當透明代理行為,當使用者A或使用者B向伺服器A或伺服器B提交請求的時候,透明代理裝置根據自身策略攔截並修改使用者A或B的報文,並作為實際的請求方,向伺服器A或B發送請求,當接收資訊回傳,透明代理再根據自身的設定把允許的報文發回至使用者A或B,如,如果透明代理設定不允許訪問伺服器B,那麼使用者A或者使用者B就不會得到伺服器B的資料。
[轉]圖解正向 Proxy、反向 Proxy、透明代理