我正在使用以下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请求。
答案 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跟踪。