我正在运行Varnish 3.0.2,Apache2,Pressflow。我试图让ESI升级并且第一次工作,它确实有效,但只是第一次请求父页面。之后,它只是从缓存中提取父页面和替换的内容。我唯一能想到的是包含的内容被永久缓存,即使我告诉它根本不缓存包含的文件,这里是存储包含文件的对象...
11 ObjProtocol c HTTP/1.1
11 ObjResponse c OK
11 ObjHeader c Date: Wed, 18 Jul 2012 23:25:56 GMT
11 ObjHeader c X-Powered-By: PHP/5.3.3-1ubuntu9.10
11 ObjHeader c Last-Modified: Wed, 18 Jul 2012 23:25:56 +0000
11 ObjHeader c Expires: Sun, 11 Mar 1984 12:00:00 GMT
11 ObjHeader c Vary: Cookie,Accept-Encoding
11 ObjHeader c ETag: "1342653956"
11 ObjHeader c Content-Encoding: gzip
11 ObjHeader c Content-Length: 656
11 ObjHeader c Content-Type: text/html
11 ObjHeader c Server: Apache/2.2.11
11 ObjHeader c Cache-Control: no-store
我花了整整一天时间,搜索,阅读我能找到的每篇文章,在VCL和HTTP标题中尝试了一大堆配置调整。我看不出任何我做错的事。
这是我的VCL的一个片段,试图强制它不存储在缓存中
sub vcl_fetch {
set beresp.do_esi = true;
if (req.url ~ "^/esi_") {
set beresp.http.Cache-Control = "no-store";
set beresp.ttl = 0s;
}
}
我想补充一点,我在varnishlog中没有看到任何错误。我试过在include src中只使用路径和主机+路径,但没有区别。它根本不会向后端询问新内容。如果您正在查看第二个和后续请求的日志,您将不会意识到它是ESI页面。
答案 0 :(得分:0)
在sub vcl_recv {}中提供了一些内容,告诉varnish不要在缓存中查找请求,并从后端服务器定义一个额外的http响应元素,该响应元素由vcl中的条件处理。例如“pragma:no-cache”..
您可以使用〜“^ / esi_”..
在vcl_recv中扩展此条件sub vcl_recv(
# ...
# the rest goes here ..
# ...
if ((req.url ~ "^/esi_") && (req.http.pragma ~ "no-cache")) {
return (pass);
}
# ...
}