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