2014-01-09 22 views
1

我用下面的VCL可以幫助我確定如果我得到一個光油緩存命中或小姐:光油緩存未命中使用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 

如果我看的響應時間,這是對後續請求相同的URL(所以800ms的8倍快第一次,100ms第二次,然後)。這讓我認爲Varnish是緩存,但是我的vcl不正確。

我還應該補充說,沒有與請求一起發送cookie,它是一個GET請求。

回答

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痕跡。

+2

謝謝尼特曼。發現它是什麼,你發佈的VCL 181行(我使用相同的)。我的路上有「/ ajax /」。 –