squid中refresh_pattern參數

refresh_pattern指令在squid配置文件中定義,此參數控制着數據在磁盤上緩存的時間。

語法如下:

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

1,regexp:是匹配正則表達式,注意這裏是區分大小寫的,使用-i選項來定義它忽略大小寫


2,min和max:單位是分鐘,表示某個響應駐留在squid服務器的cache中的時間沒有超過min限制,那麼它不會過期,如果高於這個max限制,那麼它必須被刷新。


3,percent:['Percent' is a percentage of the objects age (time since last modification age) an object without explicit expiry time will be considered fresh.]

要理解percent必須要了解LM-factor算法,在Squid.Definitive.Guide中有張圖,如下:

wKioL1U3KQOx8cCLAABFH4AlAEo872.jpg

last-modified和expires定義可以看下圖:(Chrome瀏覽器按下F12進入調試模式)

wKioL1U3KreiiBQwAAFHo6fBidY727.jpg

這裏是一段響應報文首部(我們假設沒有經過web緩存服務器,直接由原始服務器返回的數據)

cache-control:HTTP1.1協議中定義,相對時長(相對於自身服務器時間而言)

expires:HTTP1.0中定義,1.1兼容,絕對時間

可以看到cache-control在某種程度上更加精準。

last-modified:表示在原服務器上最後一次頁面修改的時間。

LM-factor算法定義:

date表示數據從原服務器進入squid緩存服務器的時間。這裏可以看到由percent決定了expires的時間:

expires=date + [ date - (last-modified) ] * percent

所以滿足下面兩個條件之一,則cache數據過期,用戶訪問時必須被refresh。

1)緩存的數據在squid服務器中的時間超出refresh_pattern中定義的max值(相對時長)

2)緩存的數據在squid服務器中的時間超出expires的時間(絕對時間)


4,options中有些選項與http協議相違背:

override-expire:用戶請求時,squid服務器不會先檢查原始服務器響應報文首部expires,而是先檢查min,若小於min值,squid會直接返回一個未確認的cache命中。

override-lastmod:該選項導致先檢查min,再檢查percent。若小於min值,squid會直接返回一個未確認的cache命中。

reload-into-ims:squid在轉發請求之前,對該請求增加一個If-Modified-Since頭部。

ignore-reload:squid服務器將忽略客戶端請求時的no-cache指令。


案例:

refresh_pattern -i \.jpg$ 10080 50% 20160 override-expire ignore-reload reload-into-ims






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