Squidでのキャッシュコントロールについて

Squidで、コンテンツをキャッシュする際は、方針を明確にするべきです。
特に、キャッシュNGのコンテンツがないか、注意を払う必要があります。

Squidでのコンテンツキャッシュ時の基本方針

  • URI(GETパラメータ含む)を元にキャッシュされるため、同じURIで、各ユーザに異なるコンテンツを表示する場合、(絶対に)キャッシュしてはいけない。
  • キャッシュサーバは集中的なアクセスによる負荷を軽減してくれる盾と捉え、キャッシュ時間はそんなに長くしない。*1

キャッシュコンテンツの具体例

  • キャッシュOKなもの
    • ニュース記事などの公開コンテンツ
    • 画像ファイル*2
    • CSSファイル
    • JSファイル
  • キャッシュNGなもの*3
    • 会員登録画面
    • プロフィール画面

キャッシュコントロールの手段

上記のコンテンツキャッシュ方針に沿ったキャッシュコントロールを行うための手段は、以下の2通り考えられます。

1. Squidの設定による制御

Squidの設定ファイル(squid.conf)の、refresh_patternディレクティブを用いた制御方法。
URIに含まれる文字列を(正規表現で)指定することで、キャッシュしないコンテンツを定義したり、コンテンツの種類ごとにキャッシュ時間が定義したりできます。

(2010/10/6追記)Squidでのキャッシュ保存期間の設定(refresh_pattern)

2. バックエンドサーバによる制御

Squidサーバがキャッシュできるコンテンツは、「Last-Modified」ヘッダがレスポンスに存在するコンテンツのみであることを利用し、バックエンドサーバにてキャッシュコントロールを行います。

*1:キャッシュは、1分や5分でも十分でしょう。1分間有効なキャッシュ入れれば、元の通信量が100本/分だろうが1000本/分だろうが、1本/分に減ります。さらに通信を減らす為に1時間もキャッシュ保持する必要性は感じません。(むしろあまり長いと、お客さんに届ける情報のタイムラグが広がる)http://techblog.yahoo.co.jp/cat207/cat209/api2/

*2:ユーザ固有の秘密画像はのぞく。例えば、ログインシールなど。

*3:同一URLでユーザ毎に画面を出し分けたりするケースが多い画面