nginx反向代理和正向代理

1. 概念

  正向代理是一個位於客戶端和目標服務器之間的代理服務器(中間服務器)。爲了從原始服務器取得內容,客戶端向代理服務器發送一個請求,並且指定目標服務器,之後代理向目標服務器轉交併且將獲得的內容返回給客戶端。正向代理的情況下客戶端必須要進行一些特別的設置才能使用。

  反向代理正好相反。對於客戶端來說,反向代理就好像目標服務器。並且客戶端不需要進行任何設置。客戶端向反向代理髮送請求,接着反向代理判斷請求走向何處,並將請求轉交給客戶端,使得這些內容就好似他自己一樣,一次客戶端並不會感知到反向代理後面的服務,也因此不需要客戶端做任何設置,只需要把反向代理服務器當成真正的服務器就好了。

2. 區別

  正向代理需要你主動設置代理服務器ip或者域名進行訪問,由設置的服務器ip或者域名去獲取訪問內容並返回;而反向代理不需要你做任何設置,直接訪問服務器真實ip或者域名,但是服務器內部會自動根據訪問內容進行跳轉及內容返回,你不知道它最終訪問的是哪些機器。

  正向代理是代理客戶端,爲客戶端收發請求,使真實客戶端對服務器不可見;而反向代理是代理服務器端,爲服務器收發請求,使真實服務器對客戶端不可見。

  從上面的描述也能看得出來正向代理和反向代理最關鍵的兩點區別:

  • 是否指定目標服務器

  • 客戶端是否要做設置
    下面用一張圖來表示兩者的差異:

    圖片.png

  • 正向代理與反向代理

  正向代理中,proxy和client同屬一個LAN,對server透明; 反向代理中,proxy和server同屬一個LAN,對client透明。 實際上proxy在兩種代理中做的事都是代爲收發請求和響應,不過從結構上來看正好左右互換了下,所以把前者那種代理方式叫做正向代理,後者叫做反向代理。

  從用途上來區分:

  • 正向代理:正向代理用途是爲了在防火牆內的局域網提供訪問internet的途徑。另外還可以使用緩衝特性減少網絡使用率

  • 反向代理:反向代理的用途是將防火牆後面的服務器提供給internet用戶訪問。同時還可以完成諸如負載均衡等功能

  從安全性來講:

  • 正向代理:正向代理允許客戶端通過它訪問任意網站並且隱蔽客戶端自身,因此你必須採取安全措施來確保僅爲經過授權的客戶端提供服務

  • 反向代理:對外是透明的,訪問者並不知道自己訪問的是代理。對訪問者而言,他以爲訪問的就是原始服務器

3. 使用場景

  正向代理的典型用途是爲在防火牆內的局域網客戶端提供訪問Internet的途徑。正向代理還可以使用緩衝特性減少網絡使用率。反向代理的典型用途是將 防火牆後面的服務器提供給Internet用戶訪問。反向代理還可以爲後端的多臺服務器提供負載平衡,或爲後端較慢的服務器提供緩衝服務。

3.1 正向代理

  從上面的介紹也就可以猜出來正向代理的至少一個功能(俗稱×××),也即:

  用戶A無法訪問facebook,但是能訪問服務器B,而服務器B可以訪問facebook。於是用戶A訪問服務器B,通過服務器B去訪問facebook,,服務器B收到請求後,去訪問facebook,facebook把響應信息返回給服務器B,服務器B再把響應信息返回給A。這樣,通過代理服務器B,就實現了×××。

3.2 反向代理

  從上面的介紹也可以猜出來反向代理的至少一個功能(比如負載均衡),也即:

  假設用戶A訪問 http://www.aa.com/something.html,但www.aa.com上並不存在something.html頁面,於是接收用戶請求的該服務器就偷偷從另外一臺服務器上取回來,然後返回給用戶,而用戶並不知道something.html頁面究竟位於哪臺機器上。

  反向代理的作用就比較多了,這裏簡單列舉一下:

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

  • 加密和SSL加速

  • 負載均衡

  • 緩存靜態內容

  • 壓縮

  • 減速上傳

  • 安全

  • 外網發佈

  下面做兩個簡單介紹

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

圖片.png

代理作用


  用戶A始終認爲它訪問的是原始服務器B而不是代理服務器Z,但實用際上反向代理服務器接受用戶A的應答,從原始資源服務器B中取得用戶A的需求資源,然後發送給用戶A。由於防火牆的作用,只允許代理服務器Z訪問原始資源服務器B。儘管在這個虛擬的環境下,防火牆和反向代理的共同作用保護了原始資源服務器B,但用戶A並不知情。

負載均衡

圖片.png

負載均衡


  當反向代理服務器不止一個的時候,我們甚至可以把它們做成集羣,當更多的用戶訪問資源服務器B的時候,讓不同的代理服務器Z(x)去應答不同的用戶,然後發送不同用戶需要的資源。

3.3 透明代理

  透明代理比較類似正向代理的功能,差別在於客戶端根本不知道代理的存在,它改編你的request,並會傳送真實IP(使用場景就是公司限制網絡的訪問)。

  比如爲了工作效率或者安全,A公司屏蔽了QQ軟件的使用。A公司的員工接上了網絡,但發現無法使用qq。這就是透明代理搗的鬼。公司在內網和外網的中間插入一個透明代理,這個代理會根據規則抓取請求內容,遇到qq的請求我就把這個請求給屏蔽掉,這樣就完成了透明屏蔽。當然了,如果你明白原理,就可以自己搞個正向代理來繞過公司的屏蔽。

以上是第一篇比較學術型的解釋,接下來是比較淺顯易懂的,轉自http://mp.weixin.qq.com/s/ikrI3rmSYs83wdSWqq2QIg

  Nginx作爲時下最流行的HTTP服務器之一,同時它是一個反向代理服務器,提到反向代理服務器,有同學可能覺得這個概念很模糊,如果說到代理,他可能明白,但是再引出一個正向代理,估計懵了,筆者將嘗試用淺顯易懂的比方把這兩個概念解釋清楚。

正向代理

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

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

圖片.png

正向代理

反向代理

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

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

圖片.png

反向da


  兩者的區別在於代理的對象不一樣:正向代理代理的對象是客戶端,反向代理代理的對象是服務端


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章