使用json内容类型清除缓存缺失

时间:2014-01-09 16:17:16

标签: caching varnish varnish-vcl

我正在使用以下vcl帮助我确定我是否收到了Varnish缓存命中或未命中:

sub vcl_deliver {
  if (obj.hits > 0) {
    set resp.http.X-Varnish-Cache = "HIT";
  }
  else {
    set resp.http.X-Varnish-Cache = "MISS";
  }
}

这样可以正常工作,但不适用于application / json内容类型。 我在每次请求时都得到X-Varnish-Cache =“MISS”,但我不明白为什么会发生这种情况(我怀疑它是假阴性)。

以下是我(显然)非缓存json请求的响应标头示例:

Accept-Ranges:bytes
Age:0
Cache-Control:public, max-age=10800
Connection:keep-alive
Content-Encoding:gzip
Content-Length:2139
Content-Type:application/json
Date:Thu, 09 Jan 2014 16:08:21 GMT
Etag:"1389283199-1"
Expires:Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified:Thu, 09 Jan 2014 15:59:59 +0000
Server:Apache
Vary:Cookie,Accept-Encoding
Via:1.1 varnish
X-Drupal-Cache:HIT
X-Powered-By:PHP/5.3.23
X-Varnish:544296535
X-Varnish-Cache:MISS

如果我查看响应时间,则对后续请求相同网址的速度提高8倍(第一次为800毫秒,第二次为100毫秒,然后再开启)。这让我觉得Varnish正在缓存,但我的vcl是不正确的。

我还应该补充说,没有cookie随请求一起发送,这是一个GET请求。

1 个答案:

答案 0 :(得分:2)

您的VCL是正确的(顺便说一句:当清除响应来自缓存X-Varnish标头附带2个数字时)。

由于Drupal缓存,响应时间有所改善。

由于Cookie或您的VCL,可能没有缓存JSON。

你在https://github.com/NITEMAN/varnish-bites/blob/master/varnish3/drupal-base.vcl

上有一个工作的vCl for drupal

无论如何,要跟踪问题的完整VCL和请求的varnishlog跟踪。