Varnish を Firebug で解析する(2)

Varnish のキャッシュが効いているかどうかや、どの位高速化されているかを解析するのは Firefox のアドオンである Firebug を使えば簡単にできます。今回は こちら に続き Firebug を使って Varnish を利用しているサイトでキャッシュが利用できない場合に対処します。

HTTP ヘッダのキャッシュ制御パラメータ

これは Varnish に限った話ではありませんが、HTTP レスポンスヘッダにはキャッシュを制御するパラメータが存在します。最初に Firebug を使ってこのパラメータを見てみましょう。

Cache-Control

まず、上のイメージの (1) の箇所の Cache-Control パラメータです。このパラメータはキャッシュをどう扱うかを示すものでバックエンドである Web サーバが Proxy(今回は Varnish)に出す命令になります。

Cache-Control には public、private、no-cache、no-store、must-revalidate 等多数の値を複数指定することが可能でその説明は以下のような URL が参考になります。

  • ハイパーテキスト転送プロトコル — HTTP/1.1
  • IPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第5章 暴露対策:プロキシキャッシュ対策

この Cache-Control はバックエンド Web サーバが送信し、もちろん Varnish でもそれに従います。その為、キャッシュがうまく効いていない場合はこのあたりのヘッダーも上のイメージのように確認しておくといいかもしれません。

ちなみにこれを(強引に)Varnish 側で書き換える方法もあります。それには /etc/varnish/default.vcl 等の設定ファイルをエディタで開き、vcl_fetch 関数の箇所でバックエンドレスポンスオブジェクトの beresp.http.cache-control を書き換えます(設定例は後述)。

Expires

次に Expires です。これは上のイメージの (2) の箇所になります。この値は有効期限です。この値もバックエンド Web サーバが生成しますが Cache-Control 同様 Varnish 側で上書きが可能で、その場合 beresp.http.expires を unset します(設定例は後述)。

Pragma

上のイメージの (3) の箇所の Pragma は Cache-Control の前バージョンのようなもので HTTP/1.0 で使われていました。 その為、Cache-Control が定義されていればそちらを見るようになります。

設定例

これらのキャッシュ制御関連パラメータを Varnish で制御するには vcl_fetch 関数で以下のように定義します。

sub vcl_fetch {
  if (req.url !~ "/admintool/.*") {
    /*
     * 管理画面以外の ttl は 1日、expires の値はリセット、cache-contorl
     * は max-age=900 のみを設定する
     */
     set beresp.ttl = 1d;
     unset beresp.http.expires;
     set beresp.http.cache-control = "max-age=900";
  }
}

Published by in Linux, Web 技術, インストール, オープンソース, スケーラビリティ and リバースプロキシ using 123 words.