Squidでのキャッシュ保存期間の設定(refresh_pattern)

キュッシュの保存期間をコントロールするための設定です。
頻繁に更新されるコンテンツは短く、画像ファイルなどはあまり変わらないので長くしたりします。

基本設定

refresh_pattern [-i] regex・・1 min・・2 percent・・3 max・・4 [options]・・5
  1. 正規表現を用いて、設定対象のファイル(パターン)を指定。デフォルトでは、大文字/小文字が区別されるので、無効にしたい場合は、-i オプションを使う。
  2. 単位は分。保存時間(キャッシュサーバ上でキャッシュされている時間)が設定値未満の場合は、(まだ新しいので)そのキャッシュオブジェクトを返却する。
  3. 単位は%。「(キャッシュサーバでの)保存時間÷(元のサーバでの)作成または変更からの経過時間」が、設定値より小さい場合、新しいとみなして、キャッシュオブジェクトを返却する。
  4. 単位は分。保存時間が設定値より長い場合は、(もう古いので)元のサーバより新しいコピーを取得して返却する。
  5. その他オプション設定

オプション設定

キャッシュ関連のHTTPヘッダー(Expires、Last-modified)を無視する設定と考えればよいと思う。

  • キャッシュ保存時間の設定をシンプルにするため、以下の項目は全部付与するケースが多いです。バックエンドサーバに依存すると、いつキャッシュが切れるか分かりづらくて嫌なので。
  • この設定をすると、バックエンドサーバより受信したHTTPレスポンスヘッダーが除去されて、ブラウザに届かないのでは?と心配になるかもしれませんが、別に除去されるわけではなく、あくまで、Squid自身のキャッシュ制御の際に考慮されなくなるだけです。
 オプション項目   内容 
 override-expire   バックエンドサーバからの「Expires」ヘッダを無視する。 
 ※SquidはExpiresでキャッシュ有効性を確認 
 override-lastmod   バックエンドサーバからの「Last-modified」ヘッダを無視する。 
 ※SquidはLast-modifiedでキャッシュ有効性を確認 
 ignore-reload   ブラウザから「Cache-Control」または「Pragma」ヘッダーによる 
 no-cache(バックエンドサーバからリロード)指定があっても無視する。 
 キャッシュがあればそれを返却する。 
 ignore-no-cache   バックエンドサーバからのno-cache(キャッシュ禁止) 
 指定があっても構わずキャッシュする。
 ignore-no-store   同上 
 ignore-private   バックエンドサーバから、「Cache-Control」ヘッダーによる 
 private(同じくキャッシュ禁止)指定があっても構わずキャッシュする。

[参考URL]
Squidの更新パターンでインターネットアクセスを高速化する (1/2) - ITmedia エンタープライズ
Kazuho@Cybozu Labs: キャッシュの上手な使い方

設定例

refresh_pattern (&nocache=1) 0 100% 0 オプション設定の記述は省略・・1*1
refresh_pattern (\?nocache=1) 0 100% 0 オプション設定の記述は省略・・2
refresh_pattern (/cgi/) 0 100% 0 オプション設定の記述は省略・・3
refresh_pattern (realtime.co.jp) 1 100% 1 オプション設定の記述は省略・・4
refresh_pattern . 5 100% 5 オプション設定の記述は省略・・5
  1. 開発者のテスト用パラメータを設け、そのパラメータが付与されている場合は、(キャッシュ時間が0なので)キャッシュされません。
  2. 同上。パラメータの付与されかたが違うだけ。
  3. 特定のパスの場合は、キャッシュしません。
  4. 特定のドメインのみ、キャッシュ時間を1分間とする。マルチドメインサイトでリアルタイム性の高いドメインの場合など。
  5. それ以外のコンテンツについては、5分間キャッシュします。

*1:見づらくなるので省略しました。省略せずに書くと、こうなります。refresh_pattern (&nocache=1) 0 100% 0 override-expire override-lastmod ignore-reload ignore-no-cache ignore-no-store ignore-private