Я использую следующий VCL, чтобы помочь мне определить, если я получаю удар кэша Varnish или промах:Varnish промахов кэша с типом содержимого JSON
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Varnish-Cache = "HIT";
}
else {
set resp.http.X-Varnish-Cache = "MISS";
}
}
Это работает отлично, но не для применения/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 раз быстрее, на последующих запросах на тот же URL (так 800 мс в первый раз, а 100 мс - второй, а затем). Это заставляет меня думать, что Лак кэширует, но мой vcl неверен.
Я также должен добавить, что никакие файлы cookie не отправляются с запросом, и это запрос GET.
Спасибо Niteman. Выяснил, что это такое, строка 181 из опубликованного вами vcl (я использую то же самое). У меня был «/ ajax /» на моем пути. –