前端開發中,經常會提到node
伺服器做反向代理
,去請求後臺資料,但是對於很多前端開發人員來說,只是知道有個詞叫反向代理
,然後就沒有然後了。這裡記錄一下反向代理的概念及好處。
概念
在計算機網路中,反向代理是代理伺服器的一種。伺服器根據客戶端的請求,從其關係的一組或多組後端伺服器(如Web伺服器)上獲取資源,然後再將這些資源返回給客戶端,客戶端只會得知反向代理的
IP
地址,而不知道在代理伺服器後面的伺服器叢集的存在。與前向代理不同,前向代理作為客戶端的代理,將從網際網路上獲取的資源返回給一個或多個的客戶端,服務端(如Web伺服器)只知道代理的
IP
地址而不知道客戶端的IP
地址;而反向代理是作為伺服器端(如Web伺服器)的代理使用,而不是客戶端。客戶端藉由前向代理可以間接訪問很多不同網際網路伺服器(叢集)的資源,而反向代理是供很多客戶端都通過它間接訪問不同後端伺服器上的資源,而不需要知道這些後端伺服器的存在,而以為所有資源都來自於這個反向代理伺服器。反向代理在現時的網際網路中並不少見,而另一些例子,像是
CDN
、SNI
代理等,是反向代理結合DNS
的一類延伸應用。——wiki
其實wiki的描述已經很好的解釋了什麼是反向代理,如果還是一頭霧水,往下看。
正向代理
有反向代理就肯定有正向代理,畢竟有正才有反嘛。那什麼是正向代理呢,我們舉一個生活中的例子:下館子
。(此處敲黑板,主角是小明)
- 小明和朋友 約好了去吃飯(為什麼是小明?沒有為什麼!),然後他們挑了一個飯店叫 菜館子(沒有為什麼!隨便挑的!),然後進去飯店裡面,找個位置坐下來,做到了7號桌(沒有為什麼,1到6都有人!)
- 服務員上來了,問:想吃點什麼呢?小明和朋友挑了水煮魚,地三鮮和花生米,服務員記下來就往後廚去了,對 後廚 說了一句:7號桌!水煮魚地三鮮加一盤花生米!然後後廚開始炒菜了。
- 菜好了,服務員端上來,小明和朋友就開吃了,吃完就各回各家去了,結束。
我們回頭看一下這個過程:
- 小明並不知道後出在哪裡,他只想吃飯,其他的不用管,就像我們開啟百度去搜資料,我只想看到資料。
- 後廚只想把菜做好端出去,就像伺服器只想把東西通過請求傳送過來。
- 服務員只想代替給小明報菜名加上端過來菜,期間小明和後廚各自做各自的事情。
這裡,服務員就是一個正向代理
。客戶端(也就是你們手中的電腦)請求伺服器,一般用不到代理,直接請求就好了。但是如果!我想請求www.google.com
,他不給訪問,就是小明喊破了喉嚨,後廚也聽不到,這時候就需要一個人代替小明去後廚,然後代替後廚把菜端過來(當然也可以不代替),這時候就需要一個正向代理的伺服器代替小明去請求谷歌。VPN(翻牆)就是這個意思,你訪問代理伺服器,然後讓代理伺服器去請求谷歌,然後把資料給你。這樣有個好處,谷歌看到的只有代理伺服器,並不知道你的存在,後面的應該就知道了把。
反向代理
現在說一下反向代理,把前面的小明過程忘掉,看這個:做飯
。(此處敲黑板,主角是後廚)
- 大明去飯店吃飯(為什麼是大明?小明回家了啊!),走到飯店裡,坐下,叫服務員,點菜,服務員報菜
- 後廚的 小楊 拿到選單,看了一下,需要肉、芹菜、西紅柿、雞蛋,肉和芹菜報給了 老王,說:老王,芹菜炒肉。
- 然後想到,後廚好像沒有西紅柿和雞蛋了,讓服務員對大明說,沒有這兩個菜了,然後大明說,那就一個芹菜炒肉吧。
- 炒好之後,端過來,大明吃飯,回家。
這裡我們看下:
- 老王只管炒菜,就像一個OSS伺服器(靜態檔案儲存伺服器),只做一件事情。當然肯定有很多個老王,也就是很多個不同種類的伺服器。
- 小楊過濾掉了大明的西紅柿雞蛋,從某個意義上講,其實充當了後廚的防火牆,沒有菜你讓我做!不做!就像伺服器阻止了一些入侵和攻擊。
- 在正常情況下,小楊會把不同的菜給不同的人炒,這裡可以理解為負載均衡。
反向代理
的過程簡單化可以理解為這些,在實際情況下,反向代理其實還有很多作用。
結尾
正向代理
和反向代理
兩者區別在於:正向代理
代理的物件是客戶端,反向代理
代理的是伺服器。
最後點一下,vue
配置 proxyTable
做反向代理其實就是讓你本地起的node
服務去訪問公司裡面的伺服器介面,來達到請求和相應的。