squid 參數 refresh_pattern 解釋

refresh_pattern指令間接的控制磁盤緩存。它幫助squid決定,是否某個給 定請求是cache命中,或作爲cache丟失對待。寬鬆的設置增加了你的cache命中率,但也增加了用戶接收過時響應的機會。另一方面,保守的設置, 降低了cache命中率和過時響應。

refresh_pattern規則僅僅應用到沒有明確過時期限的響應。原始服務器能使用Expires頭部,或者Cache-Control:max-age指令來指定過時期限。

你可以在配置文件裏放置任意數量的refresh_pattern行。squid按順序查找它們以匹配正則表達式。當squid找到一個匹配時,它使用相應的值來決定,某個緩存響應是存活還是過期。refresh_pattern語法如下:


refresh_pattern [-i] regexp min percent max [options]

例如:


refresh_pattern -i \.jpg$ 30 50% 4320 reload-into-ims    refresh_pattern -i \.png$ 30 50% 4320 reload-into-ims    refresh_pattern -i \.htm$ 0 20% 1440    refresh_pattern -i \.html$ 0 20% 1440    refresh_pattern -i . 5 25% 2880

regexp參數是大小寫敏感的正則表達式。你可以使用-i選項來使它們大小寫不敏感。squid按順序來檢查refresh_pattern行;當正則表達式之一匹配URI時,它停止搜索。

min參數是分鐘數量。它是過時響應的最低時間限制。如果某個響應駐留在cache裏的時間沒有超過這個最低限制,那麼它不會過期。類似的,max參數是存活響應的最高時間限制。如果某個響應駐留在cache裏的時間高於這個最高限制,那麼它必須被刷新。

在 最低和最高時間限制之間的響應,會面對squid的最後修改係數 (LM-factor)算法。對這樣的響應,squid計算響應的年齡和最後修改係數,然後將它作爲百分比值進行比較。響應年齡簡單的就是從原始服務器產 生,或最後一次驗證響應後,經歷的時間數量。源年齡在Last-Modified和Date頭部之間是不同的。LM-factor是響應年齡與源年齡的比 率。

圖7-2論證了LM-factor算法。squid緩存了某個目標3個小時 (基於Date和Last-Modified頭部)。LM-factor的值是50%,響應在接下來的1.5個小時裏是存活的,在這之後,目標會過期並被 當作過時處理。假如用戶在存活期間請求cache目標,squid返回沒有確認的cache命中。若在過時期間發生請求,squid轉發確認請求到原始服 務器。

 

圖7-2 基於LM-factor計算過期時間

(略圖)

理解squid檢查不同值的順序非常重要。如下是squid的refresh_pattern算法的簡單描述:


假如響應年齡超過refresh_pattern的max值,該響應過期;
假如LM-factor少於refresh_pattern百分比值,該響應存活;
假如響應年齡少於refresh_pattern的min值,該響應存活;
其他情況下,響應過期。

refresh_pattern指令也有少數選項導致squid違背HTTP協議規範。它們如下:


override-expire

該選項導致squid在檢查Expires頭部之前,先檢查min值。這樣,一個非零的min時間讓squid返回一個未確認的cache命中,即使該響應準備過期。


override-lastmod

改選項導致squid在檢查LM-factor百分比之前先檢查min值。


reload-into-ims

該 選項讓squid在確認請求裏,以no-cache指令傳送一個請求。換句話說,squid在轉發請求之前,對該請求增加一個If-Modified- Since頭部。注意這點僅僅在目標有Last-Modified時間戳時才能工作。外面進來的請求保留no-cache指令,以便它到達原始服務器。


ignore-reload

該選項導致squid忽略請求裏的任何no-cache指令

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章