[英]How do I make Varnish to stop caching ESI fragments
我在成功使用带有 Varnish 3.0 的 ESI 和 repoze.bfg 项目时遇到问题。 我有一个 ESI 片段,它通过 ESI 标签显示登录用户的通知。 但是,varnish 会缓存包含的 ESI 片段,因此手动或由于 session 对片段所做的更改不会反映在包含(和缓存的)web 页面中。
使用的 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”和重新组装缓存 web 页面发出请求,特别是因为 beresp.ttl 对于every.esi 片段设置为 0s 2) Varnish不将 ESI 片段与 web 页面一起存储在其缓存存储中**
我首先尝试完全跳过 *.esi URL 的缓存,即 return(pass); 而不是设置 beresp.ttl = 0s;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.