Nginx請求反向代理

在Nginx中請求的反向代理處理流程,請求都是經過了哪些模塊,做了哪些處理,又是如何找到應用服務器呢?

爲直觀明瞭,先上一張圖,紅色部分爲本章所述模塊:

本章所述模塊

正如標題所述,Nginx功能是進行請求的反向代理,在講解Nginx請求處理之前,首先要給大家清楚地說明下反向代理是什麼?它的功能是什麼?它在Nginx中又是怎麼配置實現的?

1 反向代理#

1.1 概念##

反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現爲一個服務器。

舉個例子,比如我想訪問 http://www.test.com/readme ,但www.test.com上並不存在readme頁面,於是他是偷偷從另外一臺服務器上取回來,然後作爲自己的內容返回用戶,但用戶並不知情。這裏所提到的 www.test.com 這個域名對應的服務器就設置了反向代理功能。

結論就是,反向代理服務器對於客戶端而言它就像是原始服務器,並且客戶端不需要進行任何特別的設置。客戶端向反向代理的命名空間(name-space)中的內容發送普通請求,接着反向代理服務器將判斷向何處(原始服務器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容原本就是它自己的一樣。

正向代理,既然有反向代理,就肯定有正向代理。什麼叫正向代理呢?

正向代理(Forward Proxy)通常都被簡稱爲代理,就是在用戶無法正常訪問外部資源,比方說受到GFW的影響無法訪問twitter的時候,我們可以通過代理的方式,讓用戶繞過防火牆,從而連接到目標網絡或者服務。

正向代理的工作原理就像一個跳板,比如:我訪問不了google.com,但是我能訪問一個代理服務器A,A能訪問google.com,於是我先連上代理服務器A,告訴他我需要google.com的內容,A就去取回來,然後返回給我。從網站的角度,只在代理服務器來取內容的時候有一次記錄,有時候並不知道是用戶的請求,也隱藏了用戶的資料,這取決於代理告不告訴網站。

結論就是,正向代理是一個位於客戶端和原始服務器(origin server)之間的服務器。爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),然後代理向原始服務器轉交請求並將獲得的內容返回給客戶端。

反向代理VS正向代理:

反向代理VS正向代理

1.2 工作流程##

  1. 用戶通過域名發出訪問Web服務器的請求,該域名被DNS服務器解析爲反向代理服務器的IP地址;

  2. 反向代理服務器接受用戶的請求;

  3. 反向代理服務器在本地緩存中查找請求的內容,找到後直接把內容發送給用戶;

  4. 如果本地緩存裏沒有用戶所請求的信息內容,反向代理服務器會代替用戶向源服務器請求同樣的信息內容,並把信息內容發給用戶,如果信息內容是緩存的還會把它保存到緩存中。

1.3 優點##

  1. 保護了真實的web服務器,web服務器對外不可見,外網只能看到反向代理服務器,而反向代理服務器上並沒有真實數據,因此,保證了web服務器的資源安全

通常的代理服務器,只用於代理內部網絡對Internet外部網絡的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中。不支持外部網絡對內部網絡的連接請求,因爲內部網絡對外部網絡是不可見的。當一個代理服務器能夠代理外部網絡上的主機,訪問內部網絡時,這種代理服務的方式稱爲反向代理服務。此時代理服務器對外就表現爲一個Web服務器,外部網絡就可以簡單把它當作一個標準的Web服務器而不需要特定的配置。不同之處在於,這個服務器沒有保存任何網頁的真實數據,所有的靜態網頁或者CGI程序,都保存在內部的Web服務器上。因此對反向代理服務器的攻擊並不會使得網頁信息遭到破壞,這樣就增強了Web服務器的安全性。

代理服務器充當內容服務器的替身,如果您的內容服務器具有必須保持安全的敏感信息,如信用卡號數據庫,可在防火牆外部設置一個代理服務器作爲內容服務器的替身。當外部客戶機嘗試訪問內容服務器時,會將其送到代理服務器。實際內容位於內容服務器上,在防火牆內部受到安全保護。代理服務器位於防火牆外部,在客戶機看來就像是內容服務器

當客戶機向站點提出請求時,請求將轉到代理服務器。然後,代理服務器通過防火牆中的特定通路,將客戶機的請求發送到內容服務器。內容服務器再通過該通道將結果回傳給代理服務器。代理服務器將檢索到的信息發送給客戶機,好像代理服務器就是實際的內容服務器。如果內容服務器返回錯誤消息,代理服務器會先行截取該消息並更改標頭中列出的任何URL,然後再將消息發送給客戶機。如此可防止外部客戶機獲取內部內容服務器的重定向URL。

這樣,代理服務器就在安全數據庫和可能的惡意攻擊之間提供了又一道屏障。與有權訪問整個數據庫的情況相對比,就算是僥倖攻擊成功,作惡者充其量也僅限於訪問單個事務中所涉及的信息。未經授權的用戶無法訪問到真正的內容服務器,因爲防火牆通路只允許代理服務器有權進行訪問

可以配置防火牆路由器,使其只允許特定端口上的特定服務器有權通過防火牆進行訪問,而不允許其他任何機器進出。安全反向代理,指當代理服務器與其他機器之間有一個或多個連接使用安全套接字層 (SSL) 協議加密數據時,即會進行安全反向代理

  1. 節約了有限的IP地址資源

企業內所有的網站共享一個在internet中註冊的IP地址,這些服務器分配私有地址,採用虛擬主機的方式對外提供服務。

  1. 減少WEB服務器壓力,提高響應速度

反向代理就是通常所說的web服務器加速,它是一種通過在繁忙的web服務器和外部網絡之間增加一個高速的web緩衝服務器來降低實際的web服務器的負載的一種技術。反向代理是針對web服務器提高加速功能,作爲代理緩存,它並不是針對瀏覽器用戶,而針對一臺或多臺特定的web服務器,它可以代理外部網絡對內部網絡的訪問請求

反向代理服務器會強制將外部網絡對要代理的服務器的訪問經過它,這樣反向代理服務器負責接收客戶端的請求,然後到源服務器上獲取內容,把內容返回給用戶,並把內容保存到本地,以便日後再收到同樣的信息請求時,它會把本地緩存裏的內容直接發給用戶,以減少後端web服務器的壓力,提高響應速度。因此Nginx還具有緩存功能。

  1. 其他優點

(1)請求的統一控制,包括設置權限、過濾規則等;

(2)區分動態和靜態可緩存內容;

(3)實現負載均衡,內部可以採用多臺服務器來組成服務器集羣,外部還是可以採用一個地址訪問;

(4)解決Ajax跨域問題;

(5)作爲真實服務器的緩衝,解決瞬間負載量大的問題

轉載自:https://www.jianshu.com/p/bed000e1830b?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation 

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