caching - 带有 json 内容类型的 Varnish 缓存未命中

标签 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请求的响应 header 的示例:
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

如果我看一下响应时间,则对同一URL的后续请求的响应时间要快8倍(第一次是800毫秒,第二次是100毫秒,然后再打开)。这使我认为Varnish正在缓存,但是我的vcl是不正确的。

我还应该补充一点,该请求没有发送任何cookie,这是一个GET请求。

最佳答案

您的 VCL 是正确的(顺便说一句:当 Varnish 响应来自缓存 X-Varnish header 时,带有 2 个数字)。

由于 Drupal 缓存,响应时间得到改善。

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

您在 https://github.com/NITEMAN/varnish-bites/blob/master/varnish3/drupal-base.vcl 上有一个适用于 drupal 的 VCl

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

关于caching - 带有 json 内容类型的 Varnish 缓存未命中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21025535/

相关文章:

caching - 是否可以根据 Varnish 中后端响应的大小来阻止缓存?

java - Java 的最佳缓存框架

java - 缓存Tomcat HttpClient测试

caching - 如何清理 WebSphere Application 服务器缓存?

c# - ASP.Net MVC session 缓存

facebook - HTTP 状态代码 206 : When should it be used?

caching - Varnish 仅缓存特定的URL路径

nginx - 用于https的 Varnish

Varnish VCL : how can I switch on req. backend_hint?

caching - Varnish 503 服务不可用