我在使用Varish3.0和repoze.bfg项目时遇到了问题。我有一个ESI片段,它通过ESI标记显示登录用户的通知。但是,varnish会缓存包含的ESI片段,因此对片段所做的更改(无论是手动更改还是会话更改)都不会反映在包含(和缓存)网页中。
使用的ESI标签:
VCL配置:
sub vcl_recv {
if (req.url ~ "[A-Za-z0-9_-]*.esi$") {
return (pass);
}
if (req.http.cookie) {
set req.http.Cookie = regsuball(req.http.Cookie, "__utm.=[^;]+(; )?", "");
if (req.http.cookie ~ "^ *$") {
remove req.http.cookie;
}
}
remove req.http.cookie;
remove req.http.etag;
}
sub vcl_fetch {
remove beresp.http.Set-Cookie;
remove beresp.http.ETag;
#do esi processing
set beresp.do_esi = true;
if (bereq.url ~ "[A-Za-z0-9_-]*.esi$") {
set beresp.ttl = 0s;
} else {
set beresp.ttl = 24h;
}
}我的假设是:
1) Varnish每次从其缓存存储中提取时都会向"path/ to /fragment.esi“和重新汇编缓存网页发出请求,特别是因为对于每个.esi片段,beresp.ttl都被设置为0。2) Varnish不会将ESI片段与网页一起存储在其缓存存储中**
发布于 2011-09-09 16:15:16
我首先尝试完全跳过缓存中的*.esi URL,即返回(Pass);而不是设置beresp.ttl = 0s;
https://stackoverflow.com/questions/7065643
复制相似问题