1. 程式人生 > >最通俗易懂地解釋:正向代理與反向代理

最通俗易懂地解釋:正向代理與反向代理

題圖:柏林牆

本文來自劉志軍的投稿,微信公眾號“Python之禪

維基百科對「代理伺服器」的解釋也是讓人一頭霧水,在計算機世界,代理可分為「正向代理」和「反向代理」,比如著名的翻牆軟體 Shadowsocks 就是一款正向代理軟體,世界上很多高流量網站也在用Nginx 也作為反向代理伺服器,那麼兩者之間究竟有什麼區別?我嘗試著用淺顯易懂的例子把兩個概念解釋清楚。

正向代理

A同學在大眾創業、萬眾創新的大時代背景下開啟他的創業之路,目前他遇到的最大的一個問題就是啟動資金,於是他決定去找馬雲爸爸借錢,可想而知,最後碰一鼻子灰回來了。

情急之下,他想到一個辦法,找關係開後門,經過一番訊息打探,原來A同學的大學老師王老師是馬雲的同學,於是A同學找到王老師,託王老師幫忙去馬雲那借500萬過來,當然最後事成了。

不過馬雲並不知道這錢是A同學借的,馬雲是借給王老師的,最後由王老師轉交給A同學。這裡的王老師在這個過程中扮演了一個非常關鍵的角色,就是代理,也可以說是正向代理,王老師代替A同學辦這件事,這個過程中,真正借錢的人是誰,馬雲是不知道的,這點非常關鍵。

我們常說的代理也就是隻正向代理,正向代理的過程,它隱藏了真實的請求客戶端,服務端不知道真實的客戶端是誰,客戶端請求的服務都被代理伺服器代替來請求,科學上網工具 Shadowsocks 扮演的就是典型的正向代理角色。

在天朝訪問 www.google.com 時會被無情的牆掉,要想翻越這堵牆,你可以在國外用 Shadowsocks 來搭建一臺代理伺服器,代理幫我們請求 www.google.com,代理再把請求響應結果再返回給我。

反向代理

大家都有過這樣的經歷,撥打10086 客服電話,一個地區的 10086 客服有幾個或者幾十個,你永遠都不需要關心在電話那頭的是哪一個,叫什麼,男的,還是女的,漂亮的還是帥氣的,你都不關心,你關心的是你的問題能不能得到專業的解答,你只需要撥通了10086 的總機號碼,電話那頭總會有人會回答你,只是有時慢有時快而已。那麼這裡的 10086 總機號碼就是我們說的反向代理

。客戶不知道真正提供服務的人是誰。

反向代理隱藏了真實的服務端,當我們訪問 www.baidu.com 的時候,就像撥打 10086 一樣,背後可能有成千上萬臺伺服器為我們服務,但具體是哪一臺,你不知道,也不需要知道,你只需要知道反向代理伺服器是誰就好了,www.baidu.com 就是我們的反向代理伺服器,反向代理伺服器會幫我們把請求轉發到提供真實計算的伺服器那裡去。Nginx 就是效能非常好的反向代理伺服器,它可以用來做負載均衡。

兩者的區別在於代理的物件不一樣,「正向代理」代理的物件是客戶端,「反向代理」代理的物件是服務端

(完)

你看到的只是冰山一角, 更多精彩文章,請移步《2016文章精華

碼農翻身

用故事講述技術