維基百科對「代理服務器」的解釋也是讓人一頭霧水,在計算機世界,代理可分為「正向代理」和「反向代理」,比如著名的翻墻軟件 Shadowsocks 就是一款正向代理軟件,全世界前 1000 的高流量網站都在用的 Web 服務器 Nginx 也作為反向代理服務器,那么兩者之間究竟有什么區(qū)別?我嘗試著用淺顯易懂的例子把兩個概念解釋清楚。
正向代理
A 同學在大眾創(chuàng)業(yè)、萬眾創(chuàng)新的大時代背景下開啟他的創(chuàng)業(yè)之路,目前他遇到的最大的一個問題就是啟動資金,于是他決定去找馬云爸爸借錢,可想而知,最后碰一鼻子灰回來了,情急之下,他想到一個辦法,找關系開后門,經過一番消息打探,原來A同學的大學老師王老師是馬云的同學,于是A同學找到王老師,托王老師幫忙去馬云那借 500 萬過來,當然最后事成了。不過馬云并不知道這錢是 A 同學借的,馬云是借給王老師的,最后由王老師轉交給 A 同學。
這里的王老師在這個過程中扮演了一個非常關鍵的角色,就是代理,也可以說是正向代理,王老師代替 A 同學辦這件事,這個過程中,真正借錢的人是誰,馬云是不知道的,這點非常關鍵。
我們常說的代理也就是只正向代理,正向代理的過程,它隱藏了真實的請求客戶端,服務端不知道真實的客戶端是誰,客戶端請求的服務都被代理服務器代替來請求,科學上網工具 Shadowsocks 扮演的就是典型的正向代理角色。
在天朝訪問 www.google.com 時會被無情的墻掉,要想翻越這堵墻,你可以在國外用 Shadowsocks 來搭建一臺代理服務器,代理幫我們請求 www.google.com,代理再把請求響應結果再返回給我。
反向代理
大家都有過這樣的經歷,撥打 10086 客服電話,一個地區(qū)的 10086 客服有幾個或者幾十個,你永遠都不需要關心在電話那頭的是哪一個,叫什么,男的,還是女的,漂亮的還是帥氣的,你都不關心,你關心的是你的問題能不能得到專業(yè)的解答,你只需要撥通了10086 的總機號碼,電話那頭總會有人會回答你,只是有時慢有時快而已。
這里的 10086 總機號碼就是我們說的反向代理??蛻舨恢勒嬲峁┓盏娜耸钦l。
反向代理隱藏了真實的服務端,當我們訪問 www.baidu.com 的時候,就像撥打 10086 一樣,背后可能有成千上萬臺服務器為我們服務,但具體是哪一臺,你不知道,也不需要知道,你只需要知道反向代理服務器是誰就好了。
www.baidu.com 就是我們的反向代理服務器,反向代理服務器會幫我們把請求轉發(fā)到提供真實計算的服務器那里去。Nginx 就是性能非常好的反向代理服務器,它可以用來做負載均衡。
兩者的區(qū)別在于代理的對象不一樣,「正向代理」代理的對象是客戶端,「反向代理」代理的對象是服務端。