從傳統(tǒng)意義上講,Proxy Server即代理服務(wù)器是指位于用戶計(jì)算機(jī)網(wǎng)絡(luò)與互聯(lián)網(wǎng)之間的服務(wù)器,其功能就是代理網(wǎng)絡(luò)用戶去取得網(wǎng)絡(luò)信息,可以把它理解為網(wǎng)絡(luò)信息的中轉(zhuǎn)站。如果WEB瀏覽器配置為使用代理服務(wù)器的話,所有的請(qǐng)求都只會(huì)通過(guò)代理轉(zhuǎn)發(fā),代理服務(wù)器會(huì)按照用戶的要求向站點(diǎn)發(fā)出訪問(wèn)請(qǐng)求,并針對(duì)各種應(yīng)用依次采用不同的過(guò)濾規(guī)則。
“透明代理服務(wù)器”指的是在客戶端完全不知曉的情況下,對(duì)代理服務(wù)器進(jìn)行配置,使其可以處理用戶請(qǐng)求。其缺點(diǎn)是代理服務(wù)器不支持SSL,但是用戶瀏覽器不需要對(duì)普通HTTP通信(即明文HTTP通信)配置,很多情況下,它與高速緩存代理服務(wù)器一起使用,代理服務(wù)器從其高速緩存中訪問(wèn)圖片和其它文件,而無(wú)需每次都占用互聯(lián)網(wǎng)帶寬從web服務(wù)器上獲取。
反向代理服務(wù)器(Reverse Proxy Server),通過(guò)在繁忙的WEB服務(wù)器和Internet之間增加一個(gè)高速的WEB緩沖服務(wù)器來(lái)降低實(shí)際的WEB服務(wù)器的負(fù)載,提高對(duì)WEB頁(yè)面的訪問(wèn)速度。反向代理服務(wù)器位于用戶WEB服務(wù)器和互聯(lián)網(wǎng)之間。當(dāng)一個(gè)HTTP連接進(jìn)入時(shí),反向代理服務(wù)器會(huì)決定所執(zhí)行的操作,然后向后端的WEB服務(wù)器發(fā)出請(qǐng)求。反向代理服務(wù)器相當(dāng)重要,它們常常肩負(fù)多種任務(wù)。
反向代理服務(wù)器可以是一個(gè)SSL終結(jié)器。這意味著SSL授權(quán)證書(shū)及其密鑰都被裝在代理服務(wù)器上,連同這些站點(diǎn)的對(duì)應(yīng)IP地址。SSL因此被終止在代理服務(wù)器,而且對(duì)后端服務(wù)器的請(qǐng)求將會(huì)以純文本的形式傳送。這在通常情況下確實(shí)不錯(cuò),但如果你的終端網(wǎng)絡(luò)是不安全的,網(wǎng)絡(luò)騙術(shù)可通過(guò)安全通道獲取所需要的服務(wù)請(qǐng)求。
在這兒我們要探討一下虛擬主機(jī)和SSL。虛擬主機(jī)的概念是基于站點(diǎn)名稱的,在連接HTTP報(bào)頭數(shù)據(jù)方面起作用。當(dāng)發(fā)出了HTTP請(qǐng)求后,支持虛擬主機(jī)的WEB服務(wù)器會(huì)為不同的內(nèi)容服務(wù),這些內(nèi)容是基于被請(qǐng)求站點(diǎn)的。本質(zhì)上講,這意味著你可以將多個(gè)域名指向一個(gè)相同的IP地址。如果啟用了SSL,必須與特定的IP地址相結(jié)合,而且SSL授權(quán)證書(shū)必須與站點(diǎn)的名稱相匹配,此站點(diǎn)正是用戶試圖訪問(wèn)的站點(diǎn)。SSL對(duì)話在HTTP數(shù)據(jù)發(fā)送之前進(jìn)行,因而服務(wù)器只有一個(gè)選擇,即一個(gè)授權(quán)證書(shū)呈現(xiàn)一個(gè)IP地址。如果在一個(gè)SSL連接建立之后,卻發(fā)現(xiàn)請(qǐng)求的URL屬于另一個(gè)站點(diǎn),WEB瀏覽器會(huì)通知用戶。如果它不如此工作,SSL就毫無(wú)意義了。
一個(gè)代理服務(wù)器也可以是一個(gè)負(fù)載平衡器。負(fù)載平衡從其基本意義上講,其工作方式不外乎兩種,實(shí)際工作時(shí)可以某一種方式運(yùn)行。第一種工作方式即智能地在IP層循環(huán)訪問(wèn)一組服務(wù)器,第二種方式通過(guò)使用代理服務(wù)器來(lái)做一些更加智能的工作。一組服務(wù)器可以使用DNS輪詢?yōu)檎军c(diǎn)服務(wù)。多個(gè)DNS記錄可以配送給一個(gè)主機(jī)名,因此連接就會(huì)從這一組服務(wù)器中選擇一個(gè)。當(dāng)然,這對(duì)于使用SSL站點(diǎn)進(jìn)行管理真是一種痛苦。路由器也可以以相似的方式實(shí)現(xiàn)負(fù)載平衡,這就要求保存現(xiàn)有的狀態(tài)從而使后續(xù)的請(qǐng)求可以被傳送到適當(dāng)?shù)姆?wù)器。不過(guò),如此運(yùn)作的大多數(shù)設(shè)備都只是充當(dāng)一個(gè)代理服務(wù)器。使用代理服務(wù)器實(shí)現(xiàn)負(fù)載平衡很有意義,特別是在考慮了它所提供的其它特性以后。
反向代理服務(wù)器可以充當(dāng)一種WEB服務(wù)器的應(yīng)用層防火墻。實(shí)際上,它包含兩個(gè)方面:進(jìn)入的請(qǐng)求受到代理服務(wù)器中所配置的規(guī)則和策略的制約,而WEB服務(wù)器被封閉起來(lái),與外部世界隔離,從而有效地抵消了跨站點(diǎn)的腳本攻擊。
反向代理服務(wù)器還經(jīng)常擔(dān)當(dāng)內(nèi)容過(guò)濾器的職責(zé),雖然過(guò)濾與防火墻息息相關(guān),但反向代理卻擁有更佳的性能。大多數(shù)代理服務(wù)器廠商實(shí)施一種阻止某些關(guān)鍵字或內(nèi)容類型的機(jī)制。這可以是防止惡意代碼攻擊真實(shí)服務(wù)器的另一個(gè)層次。
前端代理服務(wù)器可以執(zhí)行的大量任務(wù)也可以被反向代理服務(wù)器完成。一臺(tái)高速緩存服務(wù)器,如squid,可以在多種配置中與反向代理服務(wù)器協(xié)同工作。如果反向代理服務(wù)器不支持高速緩存,很多站點(diǎn)會(huì)選擇通過(guò)一個(gè)高速緩存代理來(lái)配置對(duì)后端服務(wù)器的訪問(wèn),這樣圖像和其它靜態(tài)內(nèi)容就不必從真實(shí)服務(wù)器中檢索。許多反向代理服務(wù)器也可以將一些特定的任務(wù),如圖片出租給一個(gè)完全獨(dú)立的服務(wù)器。這些代理服務(wù)器通常被稱為“WEB加速器”。
有許多代理服務(wù)器產(chǎn)品能夠以反向代理服務(wù)器模式運(yùn)行,在此我們只關(guān)注幾個(gè)免費(fèi)的開(kāi)源產(chǎn)品。Apache2.2現(xiàn)在伴隨著模塊代理服務(wù)平衡器一起使用。Apache依靠模塊代理支持反向代理服務(wù)器已有很長(zhǎng)時(shí)間了,但是通過(guò)使用平衡器模塊,Apache可以實(shí)現(xiàn)更加復(fù)雜和更有彈性的配置。當(dāng)然,配置并非十分簡(jiǎn)單,Apache本身資源密集而且對(duì)內(nèi)存要求很高。
Pound是一個(gè)反向代理服務(wù)器及負(fù)載平衡器,可以終止SSL連接。配置相當(dāng)簡(jiǎn)易,它與Apache相比的極大優(yōu)勢(shì)在于它經(jīng)過(guò)精心編制、小巧靈活。許多Pound用戶給出了其相當(dāng)驚人的吞吐量統(tǒng)計(jì),當(dāng)然它也一直是可靠有效的。