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