refresh_pattern でのリフレッシュ時間の指定

http://squid.robata.org/faq_12.htmlのページの「12.20 Squidはいつキャッシュオブジェクトをリフレッシュするように決定しますか?」の項を見る。

用語

用語説明
NOW現在時刻8/10
OBJ_DATEソースサーバからキャッシュにオブジェクトが登録された日8/5
OBJ_LASTMODソースサーバにおけるオブジェクトの最終変更日8/2
OBJ_AGE最後の検索からどれだけ経過したか(OBJ_AGE = NOW - OBJ_DATE)5日間(7200分)
LM_AGEオブジェクトが検索されたときに、すでにどれくらい古いか(LM_AGE = OBJ_DATE - OBJ_LASTMOD)3日間(4320分)
LM_FACTOROBJ_AGEとLM_AGEの比率(LM_FACTOR = OBJ_AGE / LM_AGE)1.66
CLIENT_MAX_AGEクライアント(ブラウザ)がHTTPヘッダーでリクエストした生存時間(Cache-Control: max-age=86400)
EXPIRESソースサーバがHTTPヘッダーでレスポンスする消滅時間
CONF_MINオブジェクトの明確な満期期間がない場合に、新しいオブジェクトを拾ってくるまでの時間7日間(10080分)
CONF_PERCENT明確な満期時間がないオブジェクトが計る時間で最後の修正日からの割合20%
CONF_MAX明確な消滅時間がないオブジェクトの最長リミット10日間(14400分)
STALEキャッシュがすでに古い
FRESHキャッシュはまだ新しい

条件式

 if (EXPIRES) {
     if (EXPIRES <= NOW)
         return STALE
     else
         return FRESH
 }
 if (CLIENT_MAX_AGE)
     if (OBJ_AGE > CLIENT_MAX_AGE)
         return STALE
 if (OBJ_AGE > CONF_MAX)
     return STALE
 if (OBJ_DATE > OBJ_LASTMOD) {      # 8/5 > 8/2
     if (LM_FACTOR < CONF_PERCENT)  # 1.66 < 20%
         return FRESH
     else
         return STALE
 }
 if (OBJ_AGE <= CONF_MIN)           # 5日間 <= 7日間
     return FRESH
 return STALE

まとめると

  • ウェブサーバがExpiresヘッダを出力していれば、現在時刻と比べ、キャッシュが古いか新しいか決める。
  • ブラウザがCache-Control: max-ageヘッダを出力していて、すでにキャッシュの年齢がmax-ageを超えていれば、キャッシュは古いことにする。
  • キャッシュの年齢がSquid設定値のMAXを超えていれば、キャッシュは古いことにする。
  • ウェブサーバ上のファイルがキャッシュされて以降、そのファイルが更新されていない場合、LM_FACTORとCONF_PERCENTで判別する。
  • 上について補足すると、キャッシュする時点で割と最近修正されていたファイルなら、キャッシュ後、さらに更新されている可能性が高いので、LM_FACTORは高くなる。随分昔に修正されており、ずっと放置されていたファイルなら、キャッシュ後、更新されている可能性は低いだろうから、LM_FACTORは低くなる。CONF_PERCENTはこれとの比較に使われるが、CONF_PERCENTを高く設定しておくとキャッシュは新しいとされ易くなり、低く設定しておくと古いとされやすくなる。
  • キャッシュの年齢がSquid設定値のMIN以下なら、キャッシュは新しいこととする。
  • それ以外の場合は、キャッシュは古いこととする。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2009-08-21 (金) 08:54:55