套用古龍武俠小說套路來講,代理服務技術是一門很古老的技術,是在互聯網早期出現就使用的技術。通常實現代理技術的方式就是在服務器上安裝代理服務軟件,讓其成爲一個代理服務器,從而實現代理技術。經常使用的代理技術分爲正向代理、反向代理和透明代理。本文就是針對這三種代理來說解一些基本原理和具體的適用範圍,便於你們更深刻理解代理服務技術。
最後,若是你們若是在自學遇到困難,想找一個java的學習環境,能夠加入咱們的java學習圈,點擊我加入吧,會節約不少時間,減小不少在學習中遇到的難題。
前端
一:正向代理(Forward Proxy)java
通常狀況下,若是沒有特別說明,代理技術默認說的是正向代理技術。關於正向代理的概念以下:正向代理(forward)是一個位於客戶端【用戶A】和原始服務器(origin server)【服務器B】之間的服務器【代理服務器Z】,爲了從原始服務器取得內容,用戶A向代理服務器Z發送一個請求並指定目標(服務器B),而後代理服務器Z向服務器B轉交請求並將得到的內容返回給客戶端。客戶端必需要進行一些特別的設置才能使用正向代理。
緩存
完全理解正向代理、反向代理、透明代理
(圖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的數據了。ui
2.加速訪問服務器B加密
這種說法目前不像之前那麼流行了,主要是帶寬流量的飛速發展。早期的正向代理中,不少人使用正向代理就是提速。仍是如圖1.2假設用戶A到服務器B,通過R1路由器和R2路由器,而R1到R2路由器的鏈路是一個低帶寬鏈路。而用戶A到代理服務器Z,從代理服務器Z到服務器B都是高帶寬鏈路。那麼很顯然就能夠加速訪問服務器B了。spa
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)
圖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)中的內容發送普通請求,接着反向代理將判斷向何處(原始服務器)轉交請求,並將得到的內容返回給客戶端。
使用反向代理服務器的做用以下:
完全理解正向代理、反向代理、透明代理
(圖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。注意,加密的透明代理則是屬於匿名代理,意思是不用設置使用代理了。
透明代理實踐的例子就是時下不少公司使用的行爲管理軟件。以下圖3.1
完全理解正向代理、反向代理、透明代理
(圖3.1)
用戶A和用戶B並不知道行爲管理設備充當透明代理行爲,當用戶A或用戶B向服務器A或服務器B提交請求的時候,透明代理設備根據自身策略攔截並修改用戶A或B的報文,並做爲實際的請求方,向服務器A或B發送請求,當接收信息回傳,透明代理再根據自身的設置把容許的報文發回至用戶A或B,如上圖,若是透明代理設置不容許訪問服務器B,那麼用戶A或者用戶B就不會獲得服務器B的數據。