章 29. Proxy 伺服器 Squid

內容目錄

29.1. 關於 Proxy 快取的說明
29.2. 系統需求
29.3. 啟動 Squid
29.4. /etc/squid/squid.conf 組態檔案
29.5. 設定操作順暢的 Proxy
29.6. cachemgr.cgi
29.7. squidGuard
29.8. 使用 Calamaris 產生快取報告
29.9. 如需詳細資訊

摘要

Squid 是 Linux 與 UNIX 平台普遍使用的 Proxy 快取。這表示它會將要求的網際網路物件 (例如網頁伺服器或 FTP 伺服器上的資料),儲存在比伺服器更接近要求工作站的機器上。本章節討論其組態、執行它所需的設定、如何設定系統以執行操作順暢的 Proxy 設定、如何使用程式說明來收集關於使用快取的統計資料 (像是 Calamaris 與 cachemgr) 以及如何使用 squidGuard 來過濾網站內容。

Squid 可做為 Proxy 快取。它會將物件要求從用戶端 (在此例中是從網頁瀏覽器) 重新導向至伺服器。當從伺服器而來的要求物件到達時,它會將物件傳送到用戶端,並在硬碟快取中保留它們的複本。快取的其中一個優點為,當有數個用戶端要求相同的物件時,都可以從硬碟快取來提供。這可讓用戶端比從網際網路更快地擷取資料。這個程序也可以減少網路流量。

除了實際快取之外,Squid 提供更廣泛的功能,例如分散在 Proxy 伺服器中互相通訊階層的負荷、為所有存取 Proxy 的用戶端定義更嚴格的存取控制清單,允許或拒絕使用其他應用程式來存取特定網頁,以及產生經常瀏覽的網頁統計資料,以評估使用者的瀏覽習慣。Squid 不是一般的 Proxy。一般而言,它只會代理 HTTP 連線。它也支援 FTP、Gopher、SSL 以及 WAIS 等通訊協定,但是它並不支援其他的網際網路通訊協定,例如 Real Audio、新聞或視訊會議。因為 Squid 只支援 UDP 通訊協定提供不同快取之間的通訊,許多其他的多媒體程式並不支援。


29.1. 關於 Proxy 快取的說明

當 Squid 做為 Proxy 快取時,有幾種使用方式。若與防火牆合併,它有助於安全性。多個 Proxy 可一起使用。它也可以判斷應該快取物件類型和持續的時間長短。

29.1.1. Squid 以及安全性

它可以使用 Squid 加上防火牆,以便使用 Proxy 快取來保護內部網路不受到外部的存取。防火牆將會拒絕所有的用戶端存取 Squid 以外的外部服務。所有的網路連線都必須由 Proxy 來建立。藉由這種組態方式,Squid 可完全控制網頁存取。

如果防火牆組態包含 DMZ,則 Proxy 應該在此區域中操作。節 29.5, "設定操作順暢的 Proxy" 描述如何執行操作順暢的 Proxy。這簡化了用戶端的組態,因為在此情況下,它們不需要有關 Proxy 的任何資訊。

29.1.2. 多個快取

經過設定之後,數個 Squid 例項之間可以交換物件。這可減少總系統的負荷,並可增加在本地網路中找到已存在物件的機會。您也可以設定快取階層,使快取可以將物件要求轉送至同層級的快取或上層快取──這將使其從區域網路的另一個快取或直接從來源取得物件。

為快取階層選擇適當的拓樸是非常重要的事,因為這樣它就不會增加網路的整體流量。就大型的網路而言,就非常合適為每個子網路設定 Proxy 伺服器,並將它們連線至上層的 Proxy,這樣就可以連線至 ISP 的 Proxy 快取。

這些通訊都是由在 UDP 通訊協定最上層執行的 ICP (網際網路快取通訊協定,Internet Cache Protocol) 所處理。在快取之間的資料傳輸是使用以 TCP 為基礎的 HTTP (超文字傳輸通訊協定,Hypertext Transmission Protocol) 來處理。

為了能找到取得物件最適合的伺服器,某個快取會將 ICP 要求傳送到所有同層級的 Proxy。如果有偵測到物件,就會透過具有 HIT 代碼的 ICP 回應來回覆這些要求,或者如果沒有偵測到物件,就會透過具有 MISS 代碼的 ICP 回應來回覆這些要求。如果找到多個 HIT 回應,Proxy 伺服器就會視某些因素來決定要下載的伺服器,例如哪個快取可以傳送最快的回覆或是哪個伺服器距離最近。如果沒有收到符合的回應,則會將要求傳送到上層快取。

[Tip]提示

為了避免在網路中有不同快取的物件重複,會使用其他的 ICP 通訊協定。例如 CARP (快取陣列路由通訊協定,Cache Array Routing Protocol) 或是 HTCP (超文字快取通訊協定,Hypertext Cache Protocol)。在網路中維護愈多的物件,則找到所需物件的機率也就愈大。

29.1.3. 快取網際網路物件

並非在網路中所有可用的物件都是靜態。其中有許多動態產生的 CGI 頁面、訪客計數器以及加密的 SSL 內容文件。諸如此類的物件是不會被快取的,因為每次存取它們時,它們都會改變。

還有一個問題就是,所有儲存在快取中的其他物件,應該停留在快取中多長的時間。為了決定該停留多久,會指定各種可能的狀態給快取中的所有物件。網路以及 Proxy 伺服器是藉由新增標題至這些物件來找出物件的狀態,例如「上次修改」或「過期」以及對應日期。也會使用不應該快取指定該物件的其他標題。

一般而言會取代在快取中的物件,這是因為缺乏磁碟空間,而使用像是 LRU (最近使用的) 等演算法之故。基本上這表示 Proxy 會清空那些最久沒有被要求的物件。