[英]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.