天天看點

輕松了解正向代理與反向代理

我知道有很多專注于業務研發的童鞋,經常搞不清“正向代理”與“反向代理”這兩個東西。很多時候,因為這些東西的應用設計大多在架構或者運維那邊完成了,導緻了開發人員容易對這部分知識的一知半解。那麼這些内容重要嗎?如果你不想隻是每天CRUD,那麼弄清楚這個非常重要!下面來看看這篇轉自“漫話程式設計”的好文,可以幫你輕松的掌握這兩個的概念與實際應用。

周末,我正在網上搜尋履歷,準備給團隊招聘新人。這時候,女朋友回來了,看起來并不是很高興。

反向代理(reverse proxy):是指以代理伺服器來接受internet上的連接配接請求,然後将請求轉發給内部網絡上的伺服器,并将從伺服器上得到的結果傳回給internet上請求連接配接的用戶端,此時代理伺服器對外就表現為一個反向代理伺服器。

正向代理(forward proxy):是一個位于用戶端和目标伺服器之間的伺服器(代理伺服器),為了從目标伺服器取得内容,用戶端向代理伺服器發送一個請求并指定目标,然後代理伺服器向目标伺服器轉交請求并将獲得的内容傳回給用戶端。

這種代理其實在生活中是比較常見的,比如科學上網技術,其用到的就是代理技術。

有時候,使用者想要通路某國外網站,該網站無法在國内直接通路,但是我們可以通路到一個代理伺服器,這個代理伺服器可以通路到這個國外網站。這樣呢,使用者對該國外網站的通路就需要通過代理伺服器來轉發請求,并且該代理伺服器也會将請求的響應再傳回給使用者。這個上網的過程就是用到了正向代理。

這個過程其實和租房子很像。

租房子的時候,一般情況下,我們很難聯系到房東,因為有些房東為了圖友善,隻把自己的房屋資訊和鑰匙交給中介了。而房客想要租房子,隻能通過中介才能聯系到房東。而對于房東來說,他可能根本不知道真正要租他的房子的人是誰,他隻知道是中介在聯系他。

這裡面一共有三個角色,租客(使用者)、中介(代理伺服器)和房東(國外網站,目标伺服器)。引入中介(代理伺服器)的原因是使用者無法聯系上房東(使用者無法通路國外網站)。

是以,正向代理,其實是"代理伺服器"代理了"用戶端",去和"目标伺服器"進行互動。

通過正向代理伺服器通路目标伺服器,目标伺服器是不知道真正的用戶端是誰的,甚至不知道通路自己的是一個代理(有時候中介也直接冒充租客)。

突破通路限制 

通過代理伺服器,可以突破自身IP通路限制,通路國外網站,教育網等。

即,租客可以通過中介,來解決無法聯系上房東的問題。

提高通路速度

通常代理伺服器都設定一個較大的硬碟緩沖區,會将部分請求的響應儲存到緩沖區中,當其他使用者再通路相同的資訊時, 則直接由緩沖區中取出資訊,傳給使用者,以提高通路速度。

即,中介手裡留存了很多房源資訊和鑰匙,可以直接帶租客去看房。

隐藏用戶端真實IP

上網者也可以通過這種方法隐藏自己的IP,免受攻擊。

即,房東并不知道租客的真實身份。PS:但是中介知道了,可能騷擾更多….

我們在租房子的過程中,除了有些房源需要通過中介以外,還有一些是可以直接通過房東來租的。使用者直接找到房東租房的這種情況就是我們不使用代理直接通路國内的網站的情況。

還有一種情況,就是我們以為我們接觸的是房東,其實有時候也有可能并非房主本人,有可能是他的親戚、朋友,甚至是二房東。但是我們并不知道和我們溝通的并不是真正的房東。這種幫助真正的房主租房的二房東其實就是反向代理伺服器。這個過程就是反向代理。

對于常用的場景,就是我們在Web開發中用到的負載均衡伺服器(二房東),用戶端(租客)發送請求到負載均衡伺服器(二房東)上,負載均衡伺服器(二房東)再把請求轉發給一台真正的伺服器(房東)來執行,再把執行結果傳回給用戶端(租客)。

 是以,反向代理,其實是"代理伺服器"代理了"目标伺服器",去和"用戶端"進行互動。

通過反向代理伺服器通路目标伺服器時,用戶端是不知道真正的目标伺服器是誰的,甚至不知道自己通路的是一個代理。

隐藏伺服器真實IP

使用反向代理,可以對用戶端隐藏伺服器的IP位址。

即,租客并不房東知道的真實身份。

負載均衡

反向代理伺服器可以做負載均衡,根據所有真實伺服器的負載情況,将用戶端請求分發到不同的真實伺服器上。

即,二房東發現房主本人很忙,于是找到房主的妻子幫忙處理租房事宜。

反向代理伺服器可以對于靜态内容及短時間内有大量通路請求的動态内容提供緩存服務,提高通路速度。

即,二房東同樣有房屋資訊和鑰匙。

提供安全保障

反向代理伺服器可以作為應用層防火牆,為網站提供對基于Web的攻擊行為(例如DoS/DDoS)的防護,更容易排查惡意軟體等。還可以為後端伺服器統一提供加密和SSL加速(如SSL終端代理),提供HTTP通路認證等。

即,二房東可以有效的保護房東的安全。

雖然正向代理伺服器和反向代理伺服器所處的位置都是用戶端和真實伺服器之間,所做的事情也都是把用戶端的請求轉發給伺服器,再把伺服器的響應轉發給用戶端,但是二者之間還是有一定的差異的。

1、正向代理其實是用戶端的代理,幫助用戶端通路其無法通路的伺服器資源。反向代理則是伺服器的代理,幫助伺服器做負載均衡,安全防護等。

2、正向代理一般是用戶端架設的,比如在自己的機器上安裝一個代理軟體。而反向代理一般是伺服器架設的,比如在自己的機器叢集中部署一個反向代理伺服器。

3、正向代理中,伺服器不知道真正的用戶端到底是誰,以為通路自己的就是真實的用戶端。而在反向代理中,用戶端不知道真正的伺服器是誰,以為自己通路的就是真實的伺服器。

4、正向代理和反向代理的作用和目的不同。正向代理主要是用來解決通路限制問題。而反向代理則是提供負載均衡、安全防護等作用。二者均能提高通路速度。