帶著問題學:正向代理和反向代理的區別

image.png

前言

學習 nginx 過程中,了解到反向代理 一詞,以前聽說過很多次,但沒有具體了解到底為什么叫反向代理,那同時應該也有對應的正向代理一說。因此查閱了一下,下面記錄一下學習結果。

先上結論:

  • 正向代理代理的是客戶端,隱藏真實客戶端;
  • 反向代理代理的是服務端,隱藏真實服務端。

什么是正向代理

知乎上有個很好的例子這里拿來用一下:

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

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

正向代理示意圖

什么是反向代理

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

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

反向代理

反向代理的實現過程

  1. 需要有一個負載均衡設備來分發用戶請求,將用戶請求分發到空閑的服務器上;
  2. 服務器返回自己的服務到負載均衡設備;
  3. 負載均衡將服務器的服務返回用戶。

以上的潛臺詞是:用戶和負載均衡設備直接通信,也意味著用戶做服務器域名解析時,解析得到的IP其實是負載均衡的IP,而不是服務器的IP,這樣有一個好處是,當新加入/移走服務器時,僅僅需要修改負載均衡的服務器列表,而不會影響現有的服務。

正向代理與反向代理的區別

代理其實就是一個中介,A和B本來可以直連,中間插入一個C,C就是中介。

  • 正向代理:剛開始的時候,代理多數是幫助內網client訪問外網server用的(比如HTTP代理),從內到外
  • 反向代理:后來出現了反向代理,"反向"這個詞在這兒的意思其實是指方向相反,即代理將來自外網client的請求forward到內網server,從外到內
  • 正向代理中,代理和客戶端同屬一個LAN,對服務端透明;
  • 反向代理中,代理和服務端同屬一個LAN,對服務端透明。

實際上不論正/反代理做的事都是代為收發請求和響應。

代理服務器應用的場景

場景一

如果不采用代理,用戶的IP、端口號直接暴露在Internet(盡管地址轉換NAT),外部主機依然可以根據IP、端口號來開采主機安全漏洞,所以在企業網,一般都是采用代理服務器訪問互聯網。同時,如果有安全漏洞,由于代理服務器數量有限,因此相對于修補千千萬萬的用戶主機,修補代理服務器的安全漏洞更方便會計。

場景二

在一個超大型局域網,德高望重的家長覺得小盆友們“幼稚”、“有時還有點單純”,外部的世界是洪水猛獸,為了不讓小盆友們學壞,決定不讓小盆友們訪問一些網站,可小盆友們有強烈的逆反心理,儂越是不讓我看,我越是想看,于是小盆友們使用了代理服務器,這些代理服務器將禁止訪問的網頁打包好,然后再轉交給小盆友,僅此而已。

當然關鍵的關鍵是代理服務器不在禁止名單當中!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 上一篇《WEB請求處理一:瀏覽器請求發起處理》,我們講述了瀏覽器端請求發起過程,通過DNS域名解析服務器IP,并建...
    七寸知架構閱讀 81,245評論 21 356
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,973評論 19 139
  • lydia(中關村一姐,拉勾網女神):請問微信公眾號的經營范圍怎么修改呀? 唐三藏(小黃人科技CE0):去工商局申...
    西瓜會閱讀 1,141評論 0 1
  • 世界上最遙遠的距離,不是你我相隔千里,而是默默留意,你刷盡朋友圈,卻始終不曾有一句問候。 自嘲地笑笑,你我相知不過...
    瑾瑜菇涼閱讀 216評論 0 0
  • 才發現很久沒寫周記了,不僅懶,還忙 機器學習長期沒能總結,已經跟不上了 接手了老代碼,更了一億個 bug,現在喜迎...
    F菌fghpdf閱讀 190評論 0 0