最近有打算研讀nginx源代碼,看到網上介紹nginx可以作為一個反向代理服務器完成負載均衡。所以搜羅了一些關于反向代理服務器的內容,整理綜合。
反向代理(Reverse Proxy)方式是指以代理服務器來接受Internet上的連接請求,然后將請求轉發給內部網絡上的服務器;并將從服務器上得到的結果返回給Internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。
通常的代理服務器,只用于代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,并將本來要直接發送到Web服務器上的http請求發送到代理服務器中。當一個代理服務器能夠代理外部網絡上的主機,訪問內部網絡時,這種代理服務的方式稱為反向代理服務。
實現反向代理服務器通常有兩種模型,它可以作為內容服務器的替身,也可以作為內容服務器集群的負載均衡器。
作內容服務器的替身?????????????????????
如果您的內容服務器具有必須保持安全的敏感信息,如信用卡號數據庫,可在防火墻外部設置一個代理服務器作為內容服務器的替身。當外部客戶機嘗試訪問內容服務器時,會將其送到代理服務器。實際內容位于內容服務器上,在防火墻內部受到安全保護。代理服務器位于防火墻外部,在客戶機看來就像是內容服務器。
當客戶機向站點提出請求時,請求將轉到代理服務器。然后,代理服務器通過防火墻中的特定通路,將客戶機的請求發送到內容服務器。內容服務器再通過該通道將結果回傳給代理服務器。代理服務器將檢索到的信息發送給客戶機,好像代理服務器就是實際的內容服務器。如果內容服務器返回錯誤消息,代理服務器會先行截取該消息并更改標頭中列出的任何 URL,然后再將消息發送給客戶機。如此可防止外部客戶機獲取內部內容服務器的重定向URL。
這樣,代理服務器就在安全數據庫和可能的惡意攻擊之間提供了又一道屏障。與有權訪問整個數據庫的情況相對比,就算是僥幸攻擊成功,作惡者充其量也僅限于訪問單個事務中所涉及的信息。未經授權的用戶無法訪問到真正的內容服務器,因為防火墻通路只允許代理服務器有權進行訪問。
作為內容服務器的負載均衡器
可以在一個組織內使用多個代理服務器來平衡各 Web 服務器間的網絡負載。在此模型中,可以利用代理服務器的高速緩存特性,創建一個用于負載平衡的服務器池。此時,代理服務器可以位于防火墻的任意一側。如果 Web 服務器每天都會接收大量的請求,則可以使用代理服務器分擔 Web 服務器的負載并提高網絡訪問效率。
對于客戶機發往真正服務器的請求,代理服務器起著中間調停者的作用。代理服務器會將所請求的文檔存入高速緩存。如果有不止一個代理服務器,DNS 可以采用“循環復用法”選擇其 IP 地址,隨機地為請求選擇路由。客戶機每次都使用同一個 URL,但請求所采取的路由每次都可能經過不同的代理服務器。
可以使用多個代理服務器來處理對一個高用量內容服務器的請求,這樣做的好處是內容服務器可以處理更高的負載,并且比其獨自工作時更有效率。在初始啟動期間,代理服務器首次從內容服務器檢索文檔,此后,對內容服務器的請求數會大大下降。
更多Nginx相關技術文章,請訪問Nginx使用教程欄目進行學習!