一.代理
代理,也稱為網絡代理,是一種特殊的網絡服務,允許一個網絡終端(一般為客戶端)通過這個服務與另一個網絡終端(一般為服務器)進行非直接的連接。一些網關、路由器等網絡設備具備網絡代理功能。一般認為代理服務有利于保障網絡終端的隱私或安全,防止攻擊。提供代理服務的電腦系統或其它類型的網絡終端稱為代理服務器(英文:Proxy Server)
我們打個比方,比如說你要臺電視機,這個時候你要么去商場買,要么去狗站或者是貓站上買,當然你也可以直接從電視機生產廠商那邊直接購買。在你購買電視機的這個過程中,你,就是所謂的客戶端,購買電視機就是向服務端發送請求,而電視機生產廠商就是我們所要請求的目的服務器,在這個過程中商場,狗站,貓站則起到一個代理作用,這個時候我們稱之為代理服務器。
具體而言,代理服務器一般可以分為正向代理和反向代理。
正向代理和反向的代理參考圖(圖片來自于網絡)。
二.正向代理
正向代理就是一個位于客戶端和原始服務器(origin server)之間的服務器,為了從原始服務器取得內容,客戶端向代理發送一個請求并指定目標(原始服務器),然后代理向原始服務器轉交請求并將獲得的內容返回給客戶端。一般來說正向代理是客戶端使用的。在請求過程中,正向代理隱藏了真實請求的客戶端。也就是說你通過正向代理向我發送請求,我不知道是你發送的。
同樣,我們也來打一個比方,你讓你兒子去超市給你買包辣條,然后你兒子跑到超市給你買了包辣條回來了,在買辣條的這個過程中,你兒子就起到一個正向代理的過程,而超市就是你要請求的服務器,你就是客戶端,而買辣條這個行為則是你的請求行為。當然假如說超市的售貨人員不認識你兒子,更不認識你。所以在整個購買辣條的過程中,超市不知道實際買辣條的人是你,但是超市以為是你兒子買的辣條。這個過程我想就應該比叫容易理解了。
三.反向代理
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。
我們舉個例子,比如說你買了新房子,房子需要裝修,這個時候你需要地暖,燈飾,沙發等等,你只需要將這些事情交給裝修公司,等待最后給你裝修出來的結果就行了(這個例子可能有點不是很恰當)。在這個過程中,裝修公司所起到的作用就是類似于反向代理,你就是所所謂的請求客戶端,而那些家具的供應商,則是這個過程中額真實服務器。
在整個過程中,其實是裝修公司和供應商進行暗中勾結,你根本不知道你訪問的是哪個服務器,這樣就能夠保證服務器的安全性
四.各自的優缺點以及用途
正向代理是從訪問者出發,在訪問的過程中隱藏了訪問者的真實IP,因此你可通過正向代理來進行隱藏你自己的真實IP。但是這也同樣會有一個問題,就是對我們的網警叔叔們造成了很大的困難。
反向代理同正向代理相反,可以隱藏我們真實服務器的一些信息,并且可以在服務端進行一些配置,僅僅允許代理服務器進行代理訪問,這樣就能夠起到一定的防護作用。假如說有黑客黑進了你的服務器(其實是代理服務器)他們也找不到可以修改的東西。
因為在反向代理是存在于服務端的,我們的第每一次請求都是先到達反向代理服務器,再通過反向代理服務器進行資源的分發, 因此,可以在反向代理服務器端進行負載均衡,以及資源的分發。這個其實可以參考CDN的基本實現,CDN的本質上是使用了反向代理的技術的。另外,在使用反向代理技術的過程中,可以對服務器端的某些不經常變得資源進行適當的緩存,一減少對服務器端的請求,并且極大的減少了服務器端的IO,從而加快了訪問速度。
對于反向代理還有另外的一個用途就是作為防火墻。反向代理可以配置防火墻路由器,使其只允許特定端口特定的服務器進行訪問,而不允許其他的機子進行輸入或者是輸出,從而實現防火墻的作用。
說白了,反向代理的主要用途就兩個,一個是提高訪問速度,另外一個就是作為防火墻。
反向代理也不是說完全沒有缺點,反向代理的缺點主要表現在以下兩個方面:
- 反向代理是處于OSI參考模型第七層應用的,所以就必須為每一種應用服務專門開發一個反向代理服務器,這樣就限制了反向代理負載均衡技術的應用范圍,現在一般都用于對web服務器的負載均衡。
- 針對每一次代理,代理服務器就必須打開兩個連接,一個對外,一個對內,因此在并發連接請求數量非常大的時候,代理服務器的負載也就非常大了,在最后代理服務器本身會成為服務的瓶頸。
一般來講,可以用它來對連接數量不是特別大,但每次連接都需要消耗大量處理資源的站點進行負載均衡。