天天看點

linux設定緩存時間設定時間設定,squid緩存設定--控制頁面的緩存時間

refresh_pattern的作用:

用于确定一個頁面進入cache後,它在cache中停留的時間。

refresh_pattern 隻對後端沒設定Expires過期時間的頁面起作用,比如論壇頁面;而對類似apache

mod_expires 設定過的頁面不起作用。

文法:

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

幾個概念:

resource age =對象進入cache的時間-對象的last_modified

response age =目前時間-對象進入cache的時間

LM-factor=(response age)/(resource age)

舉個例子,這裡隻考慮percent, 不考慮min 和 max

例如:refresh_pattern 20%

假設源伺服器上www.aaa.com/index.htm

-----lastmodified

是 2007-04-10 02:00:00

squid上 proxy.aaa.com/index.htm index.htm進入cache的時間 2007-04-10 03:00:00

1)如果目前時間 2007-04-10

03:00:00

resource age =3點-2點=60分鐘

response age =0分鐘

index.htm還可以在cache停留的時間(resource age)*20%=12分鐘

也就是說,index.htm進入cache後,可以停留12分鐘,才被重新确認。

2)如果目前時間 2007-04-10 03:05:00

resource age =3點-2點=60分鐘

response age =5分鐘

index.htm還可以在cache停留的時間(resource age)*20%=12分鐘-5=7

LM-factor=5/60=8.3%<20%

一直到2007-04-10

03:12:00 LM-factor=12/60=20%

之後,cache中的頁面index.htm終于stale。

如果這時沒有index.htm的請求,index.htm會一直在緩存中,如果有index.htm請求,squid收到該請求後,由于已經過期,squid會向源伺服器發一個index.htm是否有改變的請求,源伺服器收到後,如果index.htm沒有更新,squid就不用更新緩存,直接把緩存的内容放回給用戶端,同時,重置對象進入cache的時間為與源伺服器确認的時間,比如2007-04-10

03:13:00,如果正好在這個後重新确認了頁面。重置後,resource age變長,相應在cache中存活的時間也變長。

如果有改變則把最新的index.htm傳回給squid,squid收到會更新緩存,然後把新的index.htm傳回給用戶端,同時根據新頁面中的Last_Modified和取頁面的時間,重新計算resource

age,進一步計算出存活時間。

實際上,一個頁面進入cache後,他的存活時間就确定了,即 (resource age)

* 百分比,一直到被重新确認。

了解了百分比後,min max就好了解了

squid收到一個頁面請求時:

1、計算出response age,

2、如果response age

age>max 則 stale

3、如果response

age在之間,如果response時間

常用的幾個參數的意思

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指令,以便它到達原始伺服器。

一般情況可以使用

reload-into-ims。它其實是強行控制對象的逾時時間,這違反了http協定的精神,但是在帶寬較窄的場合,可以提高明顯系統相應時間。

舉例:

refresh_pattern -i \.css$ 1440 50% 129600 reload-into-ims

refresh_pattern -i \.xml$ 1440 50% 129600 reload-into-ims

refresh_pattern -i \.html$ 1440 90% 129600 reload-into-ims-

refresh_pattern -i \.shtml$ 1440 90% 129600 reload-into-ims

refresh_pattern -i \.hml$ 1440 90% 129600 reload-into-ims

refresh_pattern -i \.jpg$ 1440 90% 129600 reload-into-ims

refresh_pattern -i \.png$ 1440 90% 129600 reload-into-ims

refresh_pattern -i \.gif$ 1440 90% 129600 ignore-reload

refresh_pattern -i \.bmp$ 1440 90% 129600 reload-into-ims

refresh_pattern -i \.js$ 1440 90% 129600 reload-into-ims

ignore-reload

該選項導緻squid忽略請求裡的任何no-cache指令。

是以。如果希望内容一進入cache就不删除,直到被主動purge掉為止,可以加上ignore-reload選項,這個我們常用在mp3,wma,wmv,gif之類。

Examples:

refresh_pattern -i \.mp3$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.wmv$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.rm$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.swf$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.mpeg$ 1440 50% 2880 ignore-reload

refresh_pattern -i \.wma$ 1440 50% 2880 ignore-reload

-------------------------------------------------------------------------------------------

首先搞清楚2個東西:

1、Last-Modified:這個是網頁最後修改的時間。可在head中設定。squid在将頁面緩存時,如果沒有設定該屬性,squid會自動将Last-Modified設定為通路時間。

2、Expires:網頁過期的時間。如果網頁過期,squid會去通路webserver重新讀取頁面。

那麼,對于動态頁面,需要在頁面中加上如下代碼(php):

//設定最後修改時間為目前時間

header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "

GMT");

//設定過期時間為1天(按秒計算)

header("Expires: " .gmdate ("D, d M Y H:i:s", time() + 3600 * 24).

" GMT");

且以上内容要放在PHP檔案的最前面。

對于一些無法或不便于設定Last-Modified和Expires的檔案如圖檔或者是論壇,我們可以在squid.conf中設定refresh_pattern來控制緩存時間:

refresh_pattern 的文法是

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

regexp 是檔案類型。

min, max的機關是分鐘,percent就是百分比。

refresh_pattern 的算法如下:

1) If (目前時間-最後修改時間) < min),cache是新鮮的

2) else if (目前時間-最後修改時間) < (min +

(max-min)*percent),cache是新鮮的

3) else cache是過期的

cache過期就需要從後面server取新鮮内容。

如:設定htm檔案過期時間為10分鐘

refresh_pattern .htm 0 25% 8

至于參數,請大家自行研究

---------------------------------------------------------------------------------------------

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轉發确認請求到原始伺服器