2014-01-09 2 views
1

Я использую следующий 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.

ответ

2

Ваш VCL является правильным (BTW: когда ответ лака приходит из кеша X-Varnish заголовок поставляется с 2 номерами).

Время ответа улучшается из-за кэширования Drupal.

Возможно, JSON не кэшируется из-за печенья или вашего VCL.

У вас есть рабочий VCl для Друпала на https://github.com/NITEMAN/varnish-bites/blob/master/varnish3/drupal-base.vcl

Во всяком случае, проследить проблему вашей полной VCL и varnishlog след запроса.

+2

Спасибо Niteman. Выяснил, что это такое, строка 181 из опубликованного вами vcl (я использую то же самое). У меня был «/ ajax /» на моем пути. –

Смежные вопросы