一文以解釋清楚正向代理與反向代理

最近我發現一個很有意思的現象,就是關於正向代理與反向代理的區別,很多人都沒有真正理解。

所以我特意寫了這篇文章,以清晰的解釋下正向代理與反向代理的異同。讓大家對正向代理與反向代理的理解更透徹。

站在更高層次去理解

我們理解一個東西時,最好不要陷入具體的技術中去,比如Http Proxy,這是正向代理還是反向代理 ,或Nginx代理等。

這種思維方式會讓我們陷入具體的技術中,當來了個新技術時,我們很可能又搞不清該叫它正向代理還是反向代理了。

所以,我們要學會往上站一層,從更高的角度去理解一個概念。

那對於正向或反向代理,識別的關鍵在於:

代理的責任方是誰,透明方又是誰

一旦你理解了這個,再來講具體的技術,你就會很清晰的識別它到底是正向代理還是反向代理了

代理中的兩種角色

在代理這個技術的世界中,恆定存在兩種角色。它們分別是:

服務提供方,提供服務訪問

服務訪問方,訪問服務

所謂代理,不管是正向代理還是反向代理,都是協助服務訪問方順利訪問服務提供方提供的服務

所以問題就來了:

對於這兩種角色,該由誰來負責代理行為,這就決定了到底是正向代理還是反向代理。

正與反,只是角度問題

其實,所謂的正向或反向,完全是看站在哪個角色得來的概念名詞。

當然,我們是站在服務訪問方的角度來命名的,也就是:

當代理這個行為由服務訪問方來負責操作,服務提供方為透明時,我們稱之為:正向代理

當代理這個行為由服務提供方來負責操作,服務訪問方為透明時,我們稱之為:反向代理

所以,看到沒,所謂的正向,反向,是站在服務訪問方來命名的。

具體點來說:

我用手機訪問公司內網服務,我在手機上設定了Http Proxy代理 ,才訪問到這個內網服務。這種就是正向代理。因為代理的責任者是訪問這一方,而不是服務提供方

我用手機訪問一個服務,這個服務使用了nginx做了跳轉,我訪問到了這個服務。那這種就是反向代理,因為服務訪問方沒有做代理這個事情,這個事情是由服務提供方做了的。

當代理由服務訪問方來操作,對服務提供方透明時,這種我們稱之為正向代理

當代理由服務提供方來操作,對服務訪問方透明時,這種我們稱之為反向代理

那有些人會問,如果我的Http Proxy服務是由服務提供方提供的呢,是不是就不是正向代理 ,而是反向代理了呢?

當然不是,不管你的Http Proxy是放在內網,還是放在外網,還是什麼,因為最終仍是呼叫方要知曉並設定這個Proxy,所以它當然就是正向代理了。

而與之相反的是,類似閘道器或nginx代理設定,對於訪問方來說,並不需要主動去設定一個代理或連線VPN這個操作,對呼叫方是透明的,當然它就是反向代理了。

總結

所以,顯而易見,http proxy ,socks5 proxy, vpn這些統統為正向代理 ,因為它們都要呼叫方主動知曉並設定。

而閘道器,nginx反向代理就是反向代理了。因為呼叫方完全不清楚這些背後是怎麼設定的,對呼叫方是透明的。

現在應該很清楚正向代理與反向代理的區別了吧。

代理的責任方是誰,透明方又是誰

記住這一條就行了。

再次強調,理解一個技術或概念,切忌就技術論技術,要學會往上站一層去理解這個技術。