NodeJS的正向代理、反向代理、透明代理詳解

引 言:Nginx作為時下最流行的HTTP服務器之一,同時它是一個反向代理服務器,提到反向代理服務器,有同學可能覺得這個概念很模糊,如果說到代理,他可能明白,但是再引出一個正向代理,估計懵瞭…

代理服務技術是一門很古老的技術,是在互聯網早期出現就使用的技術。一般實現代理技術的方式就是在服務器上安裝代理服務軟件,讓其成為一個代理服務器,從而實現代理技術。常用的代理技術分為正向代理、反向代理和透明代理。

一、正向代理(Forward Proxy)

一般情況下,如果沒有特別說明,代理技術默認說的是正向代理技術。它隱藏瞭真實的請求客戶端,服務端不知道真實的客戶端是誰,客戶端請求的服務都被代理服務器代替來請求,知名的科學上網工具shadowsocks 扮演的就是典型的正向代理角色。

這裡寫圖片描述

使用正向代理服務器作用主要有以下幾點:

1)訪問本無法訪問的服務器B

他的工作原理就像一個跳板。舉個例子,我是一個用戶,我訪問不瞭某網站,但是我能訪問一個代理服務器,這個代理服務器能訪問那個我不能訪問的網站,於是我先連上代理服務器,告訴他我需要那個無法訪問網站的內容,代理服務器去取回來,然後返回給我。

現實中的例子就是“翻墻”。不過自從VPN技術被廣泛應用外,“翻墻”不但使用瞭傳統的正向代理技術,有的還使用瞭VPN技術。

2)加速訪問服務器B

早期的正向代理中,很多人使用正向代理就是提速。

3)Cache作用

Cache(緩存)技術和代理服務技術是緊密聯系的(不光是正向代理,反向代理也使用瞭Cache(緩存)技術。

4)客戶端訪問授權

5)隱藏訪問者的行蹤

二、反向代理(reverse proxy)

在計算機世界裡,由於單個服務器的處理客戶端(用戶)請求能力有一個極限,當用戶的接入請求蜂擁而入時,會造成服務器忙不過來的局面,可以使用多個服務器來共同分擔成千上萬的用戶請求,這些服務器提供相同的服務,對於用戶來說,根本感覺不到任何差別。

反向代理隱藏瞭真實的服務端,當我們請求 www.baidu.com 的時候,就像撥打10086一樣,背後可能有成千上萬臺服務器為我們服務,但具體是哪一臺,你不知道,也不需要知道,你隻需要知道反向代理服務器是誰就好瞭,www.baidu.com 就是我們的反向代理服務器,反向代理服務器會幫我們把請求轉發到真實的服務器那裡去。

你以為你是這樣訪問百度的:

這裡寫圖片描述

其實你是這樣訪問百度的:

這裡寫圖片描述

Nginx就是性能非常好的反向代理服務器,用來做負載均衡。(開放的反向代理應用:Nginx和NAT123。Nginx是單純的反向代理,需要自行搭建反向代理服務才能使用,效率高。NAT123是結合瞭NAT和反向代理的應用,可以直接使用,解決80端口問題等,速度快。)

反向代理的實現:

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

使用反向代理服務器作用主要有以下幾點:

1)保護和隱藏原始資源服務器

這裡寫圖片描述

2)負載均衡

這裡寫圖片描述

三、透明代理

如果把正向代理、反向代理和透明代理按照人類血緣關系來劃分的話。那麼正向代理和透明代理是很明顯堂親關系,而正向代理和反向代理就是表親關系瞭 。透明代理的意思是客戶端根本不需要知道有代理服務器的存在。

下面一些對比說明便於更好的理解:

正向代理是客戶端配置,反向代理是服務器端配置。

正向代理可以訪問 Google,反向代理隻能訪問特定網址。

正向代理中,proxy和client同屬一個LAN,對server透明;

反向代理中,proxy和server同屬一個LAN,對client透明。

正向代理,代理相當於一個透明的中間件 a,你訪問任何網站 ABCDE 都走這個中間件 a,但在你看來,你訪問的永遠都是 ABCDE,而不是 a。

反向代理,固定 a 為 A 的反向代理,唯一,訪問 a 相當於訪問 A,訪問不到 BCDE,同時在你看來,你訪問的不是 A 而是 a,你甚至不知道 A 的存在。

正向代理– 我代理幫我幹活。(你發出去的 http 請求是完整的 url,由代理生成 http 請求頭)

反向代理– 我不知道幫我幹活的是代理。(服務器自己的負載均衡服務器調度,你不用管)

透明代理– 我不知道他幫我幹瞭活(著名的劫持, 重組 http 請求)

You May Also Like