Я столкнулся со специфической проблемой с Varnish ESI.
На каждой странице моего сайта есть фрагмент ESI, который выводит информацию об учетной записи (вошедшего в систему) пользователя.
Похоже, что Varnish возвращает кэшированный результат фрагмента ESI пользовательского сеанса, если браузер не отправляет Cache-Control: no-cache / Pragma: no-cache (принудительное обновление), когда он запрашивает содержимое ESI с сервера.
мой vcl_recv содержит правила для обхода этого:
if(req.url ~ "^/session-header") {
return(pass);
}
vcl_fetch также имеет правило:
if(req.url ~ "^/session-header") {
return(hit_for_pass);
} else {
set beresp.ttl = 1h;
}
По сути, это поведение со стороны браузера:
Cache-Control: max-age = 0 => Varnish возвращает кешированный фрагмент ESI
Cache-Control: no-cache / Pragma: no-cache => Varnish получает фрагмент ESI с сервера
Кажется, я не могу понять этого, и у меня такое чувство, что я пропустил довольно очевидную конфигурацию.