web-dev-qa-db-ja.com

バックエンドが明示的にCache-Controlを設定しているときにニスがページをキャッシュしないようにします:no-cache?

特定のページがキャッシュされないようにする必要がある場合があり、それらすべてにバックエンドによって設定された次の応答ヘッダーがあります。

Cache-Control: no-cache, no-store, must-revalidate, max-age=0

ただし、Varnishは、これらのページを問題なくキャッシュします。これを防ぐために構成に追加できるものはありますか? vcl_deliverまたはvcl_fetchサブルーチンに入れるべきものだと思います、 しかし、ドキュメントはあまり役に立ちません (とにかく私にとって)。

基本的に何かを探しています このように しかし逆に-応答のヘッダーをチェックする必要があります。

ワニスはバージョン3.0です(いいえ、現在アップグレードできません)


関連する構成:

sub vcl_fetch {
    if (req.http.X-Varnish-Use-Cache && beresp.status != 500) {
        set beresp.ttl = 24h;
        set beresp.do_esi = true;
        unset beresp.http.Set-Cookie;
    }

    return (deliver);
}

sub vcl_deliver {
    if(!resp.http.X-Cache) {
        if (obj.hits > 0) {
            set resp.http.X-Cache = "HIT";
        } else {
            set resp.http.X-Cache = "MISS";
        }
    } else {
        if (obj.hits > 0) {
            set resp.http.X-Cache = resp.http.X-Cache + ", HIT";
        } else {
            set resp.http.X-Cache = resp.http.X-Cache + ", MISS";
        }
    }
    set resp.http.X-Flavour = req.http.X-Flavour;
    return (deliver);
}
1
Anonymous

ワニスは_Cache-Control_ヘッダーを尊重する必要があります。

最も可能性の高い原因は、_vcl_fetch_のreturn (deliver)です。これは、Varnishのデフォルトの処理をバイパスします。これは、通常、_Cache-Control_設定を適用し、コンテンツをキャッシュ不可としてマークします。 。

したがって、_vcl_fetch_の下部から削除することをお勧めします。

1
Joshua DeWald