0

セッションが使用されている PHP によって生成された Varnish 3.0.2 キャッシュ ファイルを作成できません。デフォルトでは、Varnish が Set-Cookie を使用してファイルをキャッシュしないことは承知していますが、このヘッダーを削除していると思います。

sub vcl_recv {
        # PHP Generated CSS
        if( req.url ~ "^/css/" ) {
                unset req.http.Max-Age;
                unset req.http.Pragma;
                unset req.http.Cache-Control;
                unset req.http.Cookie;
                return(lookup);
        }

sub vcl_fetch {
 if( req.url ~ "^/css/" ) {
     remove beresp.http.Cache-Control;
     remove beresp.http.Pragma;
     remove beresp.http.set-cookie;
 }

 if (beresp.ttl <= 0s ||
     beresp.http.Set-Cookie ||
     beresp.http.Vary == "*") {
            std.log("--------- HIT FOR PASS --------");
            set beresp.ttl = 920s;
            return (hit_for_pass);
 }
 return (deliver);
}

すべての PHP リクエストは hit_for_pass に送られ、キャッシュされることはありません。TTL 値は常に -1 です。

4

1 に答える 1

1

ここで入手できる情報から、最も可能性の高い理由は、バックエンドが Cache-Control 応答ヘッダーを送信して、Varnish に TTL を 0 に設定させることです。

次のように、varnishlog で「TTL」ログ行を探します。

   21 TTL          c 216230930 RFC 600 -1 -1 1362839670 0 1362839669 1362840269 600
   21 TTL          c 216230930 VCL 600 86400 -1 1362839670 -0

最初のレコードは、(vcl_fetch が実行される前に) Varnish が TTL 用の応答ヘッダーを決定したもので、2 番目のレコードは VCL で何らかの変更を加えた後のものです。最初の 3 つの順序は、TTL、grace、keep です。TTL だけを気にする必要があります。この場合は 600 秒/10 分です。

ここで、recv と fetch の両方で return() を使用する必要はありません。代わりに、ロジックをデフォルトの VCL にフォールスルーさせるだけで、長期的には手間が省けます。

于 2013-03-09T14:41:07.950 に答える