我們們來聊聊正向代理和反向代理

AskHarries發表於2018-05-18

代理服務技術是一門很古老的技術,是在網際網路早期出現就使用的技術。一般實現代理技術的方式就是在伺服器上安裝代理服務軟體,讓其成為一個代理伺服器,從而實現代理技術。常用的代理技術分為正向代理反向代理和透明代理。本文就是針對這三種代理來講解一些基本原理和具體的適用範圍,便於大家更深入理解代理服務技術。

正向代理

A同學在大眾創業、萬眾創新的大時代背景下開啟他的創業之路,目前他遇到的最大的一個問題就是啟動資金,於是他決定去找馬雲爸爸借錢,可想而知,最後碰一鼻子灰回來了,情急之下,他想到一個辦法,找關係開後門,經過一番訊息打探,原來A同學的大學老師王老師是馬雲的同學,於是A同學找到王老師,託王老師幫忙去馬雲那借500萬過來,當然最後事成了。不過馬雲並不知道這錢是A同學借的,馬雲是借給王老師的,最後由王老師轉交給A同學。這裡的王老師在這個過程中扮演了一個非常關鍵的角色,就是代理,也可以說是正向代理,王老師代替A同學辦這件事,這個過程中,真正借錢的人是誰,馬雲是不知道的,這點非常關鍵。

我們常說的代理也就是隻正向代理,正向代理的過程,它隱藏了真實的請求客戶端,服務端不知道真實的客戶端是誰,客戶端請求的服務都被代理伺服器代替來請求,某些科學上網工具扮演的就是典型的正向代理角色。用瀏覽器訪問 www.google.com 時,被殘忍的block,於是你可以在國外搭建一臺代理伺服器,讓代理幫我去請求google.com,代理把請求返回的相應結構再返回給我。

反向代理

反向代理(Reverse Proxy)方式是指用代理伺服器來接受 internet 上的連線請求,然後將請求轉發給內部網路上的伺服器,並將從伺服器上得到的結果返回給 internet 上請求連線的客戶端,此時代理伺服器對外就表現為一個反向代理伺服器。

舉個例子,一個使用者訪問 www.example.com/readme,但是 www.example.com 上並不存在 readme 頁面,它是偷偷從另外一臺伺服器上取回來,然後作為自己的內容返回給使用者。但是使用者並不知情這個過程。對使用者來說,就像是直接從 www.example.com 獲取 readme 頁面一樣。這裡所提到的 www.example.com 這個域名對應的伺服器就設定了反向代理功能。

反向代理伺服器,對於客戶端而言它就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理的名稱空間(name-space)中的內容傳送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。如下圖所示:

proxy

反向代理典型應用場景

反向代理的典型用途是將防火牆後面的伺服器提供給 Internet 使用者訪問,加強安全防護。反向代理還可以為後端的多臺伺服器提供負載均衡,或為後端較慢的伺服器提供 緩衝 服務。另外,反向代理還可以啟用高階 URL 策略和管理技術,從而使處於不同 web 伺服器系統的 web 頁面同時存在於同一個 URL 空間下。

透明代理

透明代理的意思是客戶端根本不需要知道有代理伺服器的存在,它改編你的request fields(報文),並會傳送真實IP。注意,加密的透明代理則是屬於匿名代理,意思是不用設定使用代理了。 透明代理實踐的例子就是時下很多公司使用的行為管理軟體。如下圖

比如為了工作效率或者安全,A公司遮蔽了QQ軟體的使用。A公司的員工接上了網路,但發現無法使用qq。這就是透明代理搗的鬼。公司在內網和外網的中間插入一個透明代理,這個代理會根據規則抓取請求內容,遇到qq的請求我就把這個請求給遮蔽掉,這樣就完成了透明遮蔽。

總結

正向代理– 我代理幫我幹活。(你發出去的 http 請求是完整的 url,由代理生成 http 請求頭)
反向代理– 我不知道幫我幹活的是代理。(伺服器自己的負載均衡伺服器排程,你不用管)
透明代理– 我不知道他幫我幹了活(著名的劫持, 重組 http 請求)

我們們來聊聊正向代理和反向代理


相關文章