Бывают случаи, когда определенные страницы необходимо избегать кэширования, и все они имеют следующий заголовок ответа, установленный серверной частью:
Cache-Control: no-cache, no-store, must-revalidate, max-age=0
Тем не менее Varnish успешно кэширует эти страницы. Могу ли я что-то добавить в конфигурацию, чтобы предотвратить это? Я полагаю, это то, что нужно vcl_deliver
или vcl_fetch
подпрограммы, но документация не очень полезна (по крайней мере, мне).
В основном ищу что-то как это но наоборот - следует проверять заголовки в ответе.
Varnish - это версия 3.0 (нет, сейчас нельзя обновить)
Соответствующий конфиг:
sub vcl_fetch {
if (req.http.X-Varnish-Use-Cache && beresp.status != 500) {
set beresp.ttl = 24h;
set beresp.do_esi = true;
unset beresp.http.Set-Cookie;
}
return (deliver);
}
sub vcl_deliver {
if(!resp.http.X-Cache) {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT";
} else {
set resp.http.X-Cache = "MISS";
}
} else {
if (obj.hits > 0) {
set resp.http.X-Cache = resp.http.X-Cache + ", HIT";
} else {
set resp.http.X-Cache = resp.http.X-Cache + ", MISS";
}
}
set resp.http.X-Flavour = req.http.X-Flavour;
return (deliver);
}
Лак должен соответствовать Cache-Control
заголовок.
Наиболее вероятная причина - return (deliver)
в твоем vcl_fetch
который будет обходить обработку по умолчанию, которую имеет Varnish, что обычно применяет Cache-Control
настройки и пометить контент как не кэшируемый.
Поэтому я бы порекомендовал вам удалить это снизу vcl_fetch
.