我无法使用PHP生成的Varnish 3.0.2缓存文件来使用会话。我知道默认情况下Varnish不会使用Set-Cookie缓存文件,但我相信我正在删除此标题。
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。
答案 0 :(得分: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
第一个记录是Varnish(在vcl_fetch运行之前)决定了TTL的响应头,第二个是在VCL中进行一些修改后的内容。 前三个的顺序是TTL,grace和keep。你只需要担心TTL。在这种情况下是600s / 10分钟。
不需要在recv和fetch中使用return()。只需将逻辑降低到默认的VCL,从长远来看,它将为您节省痛苦。