代理服務(wù)器是使用非常普遍的一種將局域網(wǎng)主機聯(lián)入互聯(lián)網(wǎng)的一種方式,使用代理上網(wǎng)可以節(jié)約緊缺的IP地址資源,而且可以阻斷外部主機對內(nèi)部主機的訪問,使內(nèi)部網(wǎng)主機免受外部網(wǎng)主機的攻擊。但是,如果想讓互聯(lián)網(wǎng)上的主機訪問內(nèi)部網(wǎng)的主機資源(例如:Web站點),又想使內(nèi)部網(wǎng)主機免受外部網(wǎng)主機攻擊,一般的代理服務(wù)是不能實現(xiàn)的,需要使用反向代理來實現(xiàn)。
本文將詳細介紹反向代理服務(wù)的概念以及如何利用反向代理服務(wù)器提高WEB服務(wù)器的性能和安全性。
一.反向代理的概念
什么是反向代理呢?其實,反向代理也就是通常所說的WEB服務(wù)器加速,它是一種通過在繁忙的WEB服務(wù)器和Internet之間增加一個高速的WEB緩沖服務(wù)器(即:WEB反向代理服務(wù)器)來降低實際的WEB服務(wù)器的負載。典型的結(jié)構(gòu)如下圖所示:
Web服務(wù)器加速(反向代理)是針對Web服務(wù)器提供加速功能的。它作為代理Cache,但并不針對瀏覽器用戶,而針對一臺或多臺特定Web服務(wù)器(這也是反向代理名稱的由來)。實施反向代理(如上圖所示),只要將Reverse Proxy Cache設(shè)備放置在一臺或多臺Web服務(wù)器前端即可。當互聯(lián)網(wǎng)用戶訪問某個WEB服務(wù)器時,通過DNS服務(wù)器解析后的IP地址是Reverse Proxy Server的IP地址,而非原始Web服務(wù)器的IP地址,這時Reverse Proxy Server設(shè)備充當Web服務(wù)器,瀏覽器可以與它連接,無需再直接與Web服務(wù)器相連。因此,大量Web服務(wù)工作量被卸載到反向代理服務(wù)上。不但能夠防止外部網(wǎng)主機直接和web服務(wù)器直接通信帶來的安全隱患,而且能夠很大程度上減輕web服務(wù)器的負擔,提高訪問速度。
二. 反向代理和其它代理的比較
下面將對幾種典型的代理服務(wù)作一個簡單的比較。在網(wǎng)絡(luò)上常見的代理服務(wù)器有三種:
1. 標準的代理緩沖服務(wù)器
一個標準的代理緩沖服務(wù)被用于緩存靜態(tài)的網(wǎng)頁(例如:html文件和圖片文件等)到本地網(wǎng)絡(luò)上的一臺主機上(即代理服務(wù)器)。當被緩存的頁面被第二次訪問的時候,瀏覽器將直接從本地代理服務(wù)器那里獲取請求數(shù)據(jù)而不再向原web站點請求數(shù)據(jù)。這樣就節(jié)省了寶貴的網(wǎng)絡(luò)帶寬,而且提高了訪問速度。但是,要想實現(xiàn)這種方式,必須在每一個內(nèi)部主機的瀏覽器上明確指明代理服務(wù)器的IP地址和端口號。客戶端上網(wǎng)時,每次都把請求送給代理服務(wù)器處理,代理服務(wù)器根據(jù)請求確定是否連接到遠程web服務(wù)器獲取數(shù)據(jù)。如果在本地緩沖區(qū)有目標文件,則直接將文件傳給用戶即可。如果沒有的話則先取回文件,先在本地保存一份緩沖,然后將文件發(fā)給客戶端瀏覽器。
2. 透明代理緩沖服務(wù)器
透明代理緩沖服務(wù)和標準代理服務(wù)器的功能完全相同。但是,代理操作對客戶端的瀏覽器是透明的(即不需指明代理服務(wù)器的IP和端口)。透明代理服務(wù)器阻斷網(wǎng)絡(luò)通信,并且過濾出訪問外部的HTTP(80端口)流量。如果客戶端的請求在本地有緩沖則將緩沖的數(shù)據(jù)直接發(fā)給用戶,如果在本地沒有緩沖則向遠程web服務(wù)器發(fā)出請求,其余操作和標準的代理服務(wù)器完全相同。對于Linux操作系統(tǒng)來說,透明代理使用Iptables或者Ipchains實現(xiàn)。因為不需要對瀏覽器作任何設(shè)置,所以,透明代理對于ISP(Internet服務(wù)器提供商)特別有用。
3. 反向代理緩沖服務(wù)器
反向代理是和前兩種代理完全不同的一種代理服務(wù)。使用它可以降低原始WEB服務(wù)器的負載。反向代理服務(wù)器承擔了對原始WEB服務(wù)器的靜態(tài)頁面的請求,防止原始服務(wù)器過載。它位于本地WEB服務(wù)器和Internet之間,處理所有對WEB服務(wù)器的請求,組織了WEB服務(wù)器和Internet的直接通信。如果互聯(lián)網(wǎng)用戶請求的頁面在代理服務(wù)器上有緩沖的話,代理服務(wù)器直接將緩沖內(nèi)容發(fā)送給用戶。如果沒有緩沖則先向WEB服務(wù)器發(fā)出請求,取回數(shù)據(jù),本地緩存后再發(fā)送給用戶。這種方式通過降低了向WEB服務(wù)器的請求數(shù)從而降低了WEB服務(wù)器的負載。
三.反向代理工作原理
反向代理服務(wù)器位于本地WEB服務(wù)器和Internet之間,如下圖所示:

當用戶瀏覽器發(fā)出一個HTTP請求時,通過域名解析將請求定向到反向代理服務(wù)器(如果要實現(xiàn)多個WEB服務(wù)器的反向代理,需要將多個WEB服務(wù)器的域名都指向反向代理服務(wù)器)。由反向代理服務(wù)器處理器請求。反向代理一般只緩存可緩沖的數(shù)據(jù)(比如html網(wǎng)頁和圖片等),而一些CGI腳本程序或者ASP之類的程序不緩存。它根據(jù)從WEB服務(wù)器返回的HTTP頭標記來緩沖靜態(tài)頁面。有四個最重要HTTP頭標記:
- Last-Modified: 告訴反向代理頁面什么時間被修改
- Expires: 告訴反向代理頁面什么時間應(yīng)該從緩沖區(qū)中刪除
- Cache-Control: 告訴反向代理頁面是否應(yīng)該被緩沖
- Pragma: 告訴反向代理頁面是否應(yīng)該被緩沖.
例如:在默認情況下,ASP頁面返回” Cache-control: private.” ,所以ASP頁面時不會在反向代理服務(wù)器緩存的