代理服務(wù)器是使用非常普遍的一種將局域網(wǎng)主機(jī)聯(lián)入互聯(lián)網(wǎng)的一種方式,使用代理上網(wǎng)可以節(jié)約緊缺的IP地址資源,而且可以阻斷外部主機(jī)對(duì)內(nèi)部主機(jī)的訪問(wèn),使 內(nèi)部網(wǎng)主機(jī)免受外部網(wǎng)主機(jī)的攻擊。但是,如果想讓互聯(lián)網(wǎng)上的主機(jī)訪問(wèn)內(nèi)部網(wǎng)的主機(jī)資源(例如:Web站點(diǎn)),又想使內(nèi)部網(wǎng)主機(jī)免受外部網(wǎng)主機(jī)攻擊,一般的 代理服務(wù)是不能實(shí)現(xiàn)的,需要使用反向代理來(lái)實(shí)現(xiàn)。
本文將詳細(xì)介紹反向代理服務(wù)的概念以及如何利用反向代理服務(wù)器提高WEB服務(wù)器的性能和安全性。
一.反向代理的概念
什么是反向代理呢?其實(shí),反向代理也就是通常所說(shuō)的WEB服務(wù)器加速,它是一種通過(guò)在繁忙的WEB服務(wù)器和Internet之間增加一個(gè)高速的WEB緩沖服務(wù)器(即:WEB反向代理服務(wù)器)來(lái)降低實(shí)際的WEB服務(wù)器的負(fù)載。典型的結(jié)構(gòu)如下圖所示:

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

當(dāng)用戶瀏覽器發(fā)出一個(gè)HTTP請(qǐng)求時(shí),通過(guò)域名解析將請(qǐng)求定向到反向代理服務(wù)器(如果要實(shí)現(xiàn)多個(gè)WEB 服務(wù)器的反向代理,需要將多個(gè)WEB服務(wù)器的域名都指向反向代理服務(wù)器)。由反向代理服務(wù)器處理器請(qǐng)求。反向代理一般只緩存可緩沖的數(shù)據(jù)(比如html網(wǎng) 頁(yè)和圖片等),而一些CGI腳本程序或者ASP之類的程序不緩存。它根據(jù)從WEB服務(wù)器返回的HTTP頭標(biāo)記來(lái)緩沖靜態(tài)頁(yè)面。有四個(gè)最重要HTTP頭標(biāo) 記:
- Last-Modified: 告訴反向代理頁(yè)面什么時(shí)間被修改
- Expires: 告訴反向代理頁(yè)面什么時(shí)間應(yīng)該從緩沖區(qū)中刪除
- Cache-Control: 告訴反向代理頁(yè)面是否應(yīng)該被緩沖
- Pragma: 告訴反向代理頁(yè)面是否應(yīng)該被緩沖.
例如:在默認(rèn)情況下,ASP頁(yè)面返回” Cache-control: private.” ,所以ASP頁(yè)面時(shí)不會(huì)在反向代理服務(wù)器緩存的
反向代理服務(wù)器(Reverse Proxy Server)一般被置于源服務(wù)器的前端,如圖中所示。它配備有大容量的內(nèi)存和高速磁盤,用于緩存客戶的請(qǐng)求,所以反向代理服務(wù)器又稱為加速服務(wù)器。

圖:反向代理服務(wù)器
對(duì)于客戶送過(guò)來(lái)的請(qǐng)求,反向代理服務(wù)器的工作方式如下:
· 使用反向代理服務(wù)器后,客戶端送過(guò)來(lái)的請(qǐng)求會(huì)首先送到反向代理服務(wù)器。
· 反向代理服務(wù)器先查自己緩存的內(nèi)容(動(dòng)態(tài)內(nèi)容或靜態(tài)內(nèi)容)。
· 如果客戶請(qǐng)求內(nèi)容在緩存中,則直接將結(jié)果反饋給客戶,此次請(qǐng)求完成。
· 如果客戶請(qǐng)求內(nèi)容不在緩存中,它會(huì)根據(jù)后面的各個(gè)HTTP服務(wù)器(或內(nèi)容服務(wù)器)的運(yùn)行情況,做負(fù)載均衡處理,將請(qǐng)求進(jìn)一步送到某個(gè)http 服務(wù)器(或內(nèi)容服務(wù)器)。
· 后端服務(wù)器作處理后,反饋結(jié)果給反向代理服務(wù)器。
· 對(duì)于后端服務(wù)器反饋過(guò)來(lái)的結(jié)果,它會(huì)將結(jié)果緩存(動(dòng)態(tài)內(nèi)容或靜態(tài)內(nèi)容)起來(lái),并進(jìn)一步送給客戶端,此次請(qǐng)求完成。
反向代理服務(wù)器通常要為一個(gè)請(qǐng)求同時(shí)維護(hù)兩個(gè)會(huì)話:與客戶端的會(huì)話和與后端服務(wù)器的對(duì)話。和普通的代理不同,反向代理服務(wù)器一般只代理一臺(tái)或者有限的幾臺(tái)服務(wù)器,對(duì)于客戶而言,反向代理服務(wù)器對(duì)于他們就相當(dāng)于源服務(wù)器,對(duì)于源服務(wù)器而言,反向代理服務(wù)器通常就是唯一的客戶,因?yàn)橐话憧蛻舨缓驮捶?wù)器直接通信。典型情況下,源服務(wù)器對(duì)于客戶或者客戶對(duì)于源服務(wù)器,都是不可見(jiàn)的。
反向代理服務(wù)器的作用
代理服務(wù)器起著客戶機(jī)中繼站的作用。它轉(zhuǎn)發(fā)請(qǐng)求并接收響應(yīng),這使它成為高速緩存結(jié)果以便重用的理想場(chǎng)所。這類代理服務(wù)器稱為高速緩存代理,它具有以下作用:
· 加快對(duì)客戶的響應(yīng)時(shí)間,減輕后端源服務(wù)器(即內(nèi)容服務(wù)器)負(fù)載
使用反向代理服務(wù)器后,由于它具有大容量緩存,可以緩存多個(gè)靜態(tài)/動(dòng)態(tài)頁(yè)面,當(dāng)有客戶請(qǐng)求送過(guò)來(lái)時(shí),如能夠直接在緩存中找到請(qǐng)求結(jié)果,就可以直接反饋給客戶,而不用再將請(qǐng)求送給后端服務(wù)器。這樣就加快了對(duì)客戶的響應(yīng)時(shí)間,同時(shí)也減輕了后端源服務(wù)器的負(fù)載。
· 保障后端源服務(wù)器(即內(nèi)容服務(wù)器)的安全
對(duì)Internet上的客戶端而言,它只能接觸到反向代理服務(wù)器,因此反向代理服務(wù)器就成為后端服務(wù)器的屏障,保障了后端服務(wù)器的安全。
· 減少源服務(wù)器(即內(nèi)容服務(wù)器)節(jié)點(diǎn)之間占用的網(wǎng)絡(luò)帶寬
使用反向代理服務(wù)器后,它具有的大容量緩存可以減少源服務(wù)器的網(wǎng)絡(luò)通訊量。這樣就減少源服務(wù)器(即內(nèi)容服務(wù)器)節(jié)點(diǎn)之間占用的網(wǎng)絡(luò)帶寬。
· 對(duì)源服務(wù)器進(jìn)行負(fù)載均衡(Load Balance)。
當(dāng)后端源服務(wù)器有多個(gè)時(shí),反向代理服務(wù)器可以根據(jù)后端各個(gè)服務(wù)器當(dāng)前負(fù)載情況,做負(fù)載均衡處理,有選擇的將當(dāng)前請(qǐng)求送給最空閑的后端服務(wù)器。