У меня проблема с использованием ESI с Varnish 3.0 с проектом repoze.bfg.У меня есть фрагмент ESI, который отображает уведомление для зарегистрированных пользователей, включенное через тег ESI.Однако лак кэширует включенный фрагмент 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) Лак сделаетзапрашивает "путь / к / фрагменту.esi" и повторную сборку веб-страницы кеша каждый раз, когда он выбирает из своего хранилища кеша, особенно потому, что для beresp.ttl установлено значение 0s для каждого фрагмента .esi 2) Varnish не хранит ESIфрагменты вместе с веб-страницей в ее кеш-хранилище **