3

私は Varnish 3.0.3 を使用しており、それを使用して、静的リソースの HTTP ヘッダーに最大有効期間を設定することにより、ブラウザーのキャッシュを活用しています。次の構成を default.vcl に追加してみました。

sub vcl_fetch {
  if (beresp.cacheable) {
    /* Remove Expires from backend, it's not long enough */
    unset beresp.http.expires;

    /* Set the clients TTL on this object */
    set beresp.http.cache-control = "max-age=900";

    /* Set how long Varnish will keep it */
    set beresp.ttl = 1w;

    /* marker for vcl_deliver to reset Age: */
    set beresp.http.magicmarker = "1";
  }
}

sub vcl_deliver {
  if (resp.http.magicmarker) {
    /* Remove the magic marker */
    unset resp.http.magicmarker;

    /* By definition we have a fresh object */
    set resp.http.age = "0";
  }
}

これはhttps://www.varnish-cache.org/trac/wiki/VCLExampleLongerCachingからコピーされます。多分私はちょうどタイプミスをしました。Varnish を再起動すると、機能しなくなりました。

2 つの質問があります。これはニス 3 に対して正しい方法ですか? もしそうなら、私は何を間違っていますか?次に、再起動する前に Varnish 構成ファイルをテストする方法はありますか? 「/sbin/service httpd configtest」でApacheが持っているものに沿った何か。それはライブに行く前に間違いを見つけます。ありがとうございました。

4

1 に答える 1

2

はい、一般的に、これはバックエンドの TTL をオーバーライドする方法です。beresp.http.expires を削除し、beresp.http.cache-control を設定し、beresp.ttl を設定します。beresp.cacheable は 2.[01]-ism です。3.0 での同じテストは、beresp.ttl > 0 であることを確認することです。

ちょっとしたヒントとして、代わりにマジック マーカーを req.http に保存すると、オブジェクトをクライアントに渡す前にクリーンアップする必要がなくなります。

構成ファイルのテストに関しては、たとえば「varnishd -C -f /etc/varnish/default.vcl」で VCL コンパイラを直接呼び出すことができます。VCL に問題がある場合は、エラー メッセージが表示されます。VCL が有効な場合は、生成された C コードを含むページがいくつか表示されます。

于 2012-10-12T22:46:48.793 に答える