目錄
摘要
Squid 是 Linux 與 UNIX 平台普遍使用的代理快取。這表示它會將要求的網際網路物件 (例如網頁伺服器或 FTP 伺服器上的資料),儲存在比伺服器更接近要求工作站的機器上。您可設定多階層,以確保即使在終端使用者無法察覺的模式中,也能達到最佳的反應時間及較低的頻寬使用率。您可使用其他軟體如 squidGuard,以過濾網路內容。
Squid 可做為代理快取記憶體。它會將物件要求從用戶端 (在此例中是從網頁瀏覽器) 重新導向至伺服器。當從伺服器而來的要求物件到達時,它會將物件傳送到用戶端,並在硬碟快取記憶體中保留物件的副本。快取的其中一個優點為,當有數個用戶端要求相同的物件時,可從硬碟快取記憶體來提供。這可讓用戶端比從網際網路更快地擷取資料。這個程序也可以減少網路流量。
除了實際快取之外,Squid 還提供眾多功能,例如將負載分散到互相通訊的代理伺服器階層、為所有存取代理的用戶端定義嚴格的存取控制清單、允許或拒絕使用其他應用程式來存取特定網頁,以及產生經常瀏覽之網頁的統計資料,以評估使用者的瀏覽習慣。Squid 不是一般的代理。一般而言,它只會代理 HTTP 連線。它也支援 FTP、Gopher、SSL 以及 WAIS 等通訊協定,但不支援其他的網際網路通訊協定,例如 Real Audio、新聞或視訊會議。因為 Squid 只支援 UDP 通訊協定提供不同快取之間的通訊,許多其他的多媒體程式並不支援。
當 Squid 做為代理快取記憶體時,使用方法有多種。若與防火牆合併,它有助於提高安全性。多個代理可一起使用。它也可以判斷應該快取物件類型和持續的時間長短。
Squid 可與防火牆配合使用,以便使用代理快取記憶體來保護內部網路不受外部的存取。防火牆將會拒絕所有的用戶端存取 Squid 以外的外部服務。所有的網路連線都必須由代理來建立。藉由這種組態方式,Squid 可完全控制網頁存取。
如果防火牆組態包含 DMZ,則代理應在此區域中操作。第 41.5 節「設定操作順暢的代理」 將描述如何執行「透明」代理。這簡化了用戶端的組態,因為在此情況下,它們不需要有關代理的任何資訊。
經過設定之後,可在多個 Squid 例項之間交換物件。這樣可以減少系統的總負載,並可增加在本地網路中找到現有物件的機會。您也可以設定快取記憶體階層,使快取記憶體可以將物件要求轉遞至同層級或上層的快取記憶體 — 使其可從本地網路的另一個快取記憶體或直接從來源取得物件。
為快取記憶體階層選擇適當的拓樸是非常重要的,因為這樣它就不會增加網路的整體流量。就大型的網路而言,就非常合適為每個子網路設定代理伺服器,並將它們連線至上層的代理,這樣就可以連線至 ISP 的代理快取。
這些通訊都是由在 UDP 通訊協定最上層執行的 ICP (網際網路快取通訊協定) 所處理。在快取之間的資料傳輸是使用以 TCP 為基礎的 HTTP (超文字傳輸通訊協定,Hypertext Transmission Protocol) 來處理。
為了能找到最適合的伺服器來取得物件,某個快取記憶體會將 ICP 要求傳送到所有同層級的代理。如果有偵測到物件,這些代理就會透過具有 HIT 代碼的 ICP 回應來回覆這些要求;如果沒有偵測到物件,則會透過具有 MISS 代碼的 ICP 回應來回覆這些要求。如果找到多個 HIT 回應,代理伺服器會根據某些因素 (例如哪個快取記憶體傳送回覆的速度最快,哪個伺服器距離最近) 來決定要從哪部伺服器下載。如果沒有收到符合的回應,則會將要求傳送到上層快取。
![]() | |
為了避免網路上不同的快取記憶體中出現物件重複,系統會使用其他 ICP 通訊協定。例如 CARP (快取陣列路由通訊協定) 或 HTCP (超文字快取通訊協定)。在網路中維護愈多的物件,則找到所需物件的機率也就愈大。 |
網路中所有可用的物件並不全是靜態。其中有許多動態產生的 CGI 頁面、訪客計數器以及加密的 SSL 內容文件。諸如此類的物件是不會被快取的,因為每次存取它們時,它們都會改變。
還有一個問題就是,所有儲存在快取記憶體中的其他物件,應該在那里保留多長時間。為了決定停留時間,系統會指派各種可能的狀態給快取記憶體中的所有物件。網頁以及代理伺服器會藉由新增標頭至這些物件來找出物件的狀態,例如「上一次修改」或「到期」以及對應的日期。也會使用不應該快取指定該物件的其他標題。
由於缺少可用的硬碟空間,系統一般會使用 LRU (最近使用) 等演算法來取代快取記憶體中的物件。基本上這表示代理會清空那些最久沒有被要求的物件。