2013-03-01 56 views
0

我無法使用PHP生成的Varnish 3.0.2緩存文件,其中使用會話。我知道,默認情況下,Varnish不會使用Set-Cookie緩存文件,但我相信我會刪除這個頭文件。varnish不會緩存PHP會話文件(beresp.ttl = -1)

sub vcl_recv { 
     # PHP Generated CSS 
     if(req.url ~ "^/css/") { 
       unset req.http.Max-Age; 
       unset req.http.Pragma; 
       unset req.http.Cache-Control; 
       unset req.http.Cookie; 
       return(lookup); 
     } 

sub vcl_fetch { 
if(req.url ~ "^/css/") { 
    remove beresp.http.Cache-Control; 
    remove beresp.http.Pragma; 
    remove beresp.http.set-cookie; 
} 

if (beresp.ttl <= 0s || 
    beresp.http.Set-Cookie || 
    beresp.http.Vary == "*") { 
      std.log("--------- HIT FOR PASS --------"); 
      set beresp.ttl = 920s; 
      return (hit_for_pass); 
} 
return (deliver); 
} 

每一個PHP請求會轉到hit_for_pass和永遠不會緩存。 TTL值始終爲-1。

回答

1

根據這裏可用的信息,最可能的原因是後端發送一個Cache-Control響應頭,使Varnish將TTL設置爲0。

尋找在varnishlog的「TTL」日誌行,像這樣:

21 TTL   c 216230930 RFC 600 -1 -1 1362839670 0 1362839669 1362840269 600 
    21 TTL   c 216230930 VCL 600 86400 -1 1362839670 -0 

第一個記錄是什麼光油(vcl_fetch運行之前)決定的響應頭的意思爲TTL,第二個是什麼在VCL中進行了一些修改之後。 前三個的順序是TTL,優雅並保持。你只需要擔心TTL。在這種情況下是600s/10分鐘。

在這裏recv和fetch中使用return()是沒有必要的。只要讓邏輯代替默認的VCL,就能長期保存你的痛苦。