0

コードから、403 はホワイトリストに登録されたステータスではないため、Cache-Controlヘッダーは無視されるようです。

switch (http_GetStatus(hp)) {
    default:
        expp->ttl = -1.;

https://github.com/varnishcache/varnish-cache/blob/4.0/bin/varnishd/cache/cache_rfc2616.c#L112-L114

これは私が思いつくことができる最高のものです:

sub vcl_backend_response {
  if (beresp.status == 403) {
    set beresp.http.X-Status = beresp.status;
    set beresp.status = 200;
  }
}

sub vcl_deliver {
    if (resp.http.X-Status) {
      set resp.status = std.integer(resp.http.X-Status, 403);
      unset resp.http.X-Status;
    }
}

これによりステータスが適切に設定および設定解除されますが、すべてのリクエストは cacheMISSです。

#2018を参照

4

1 に答える 1

2

403 応答は、デフォルトでは varnish にキャッシュされません。

「上記以外のステータス コードをキャッシュできますが、vcl_backend_response で beresp.ttl を正の値に設定する必要があります。」

http://book.varnish-software.com/4.0/chapters/VCL_Basics.html#the-initial-value-of-beresp-ttlを参照してください。

于 2016-07-16T17:26:11.210 に答える