Symfony2 и Varnish - Понимание того, как это работает - PullRequest
1 голос
/ 02 декабря 2011

Я запускаю symfony2 на Apache и Varnish перед Apache. Я настроил лак для работы с Symfony (http://symfony.com/doc/current/cookbook/cache/varnish.html), и он отлично работает.

Теперь вот моя проблема: Я создал шаблон веточки, который отображает текущее время и больше ничего.

{{ "now"|date("d/m/Y H:i:s") }}

Теперь, когда я перезагружаю страницу, я вижу попадание в кеш (varnishstat), что немного странно для меня, потому что я ожидал пропуска, так как это динамический контент.

Так почему я получаю хиты кеша здесь? Может быть, какие-то магически добавленные тэги ESI?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2013

Насколько я могу судить, лак и ваш бэкэнд-сервер работают раздельно.Поэтому, когда к Varnish приходит http-запрос, сам Varnish ничего не знает о содержании ожидаемого ответа.А это значит, что «динамический контент» не имеет никакой разницы со статическим контентом.Может быть, это то, что вы запутались:)

0 голосов
/ 05 декабря 2011

Лак не знает, что такое «динамический контент»;Он знает только запросы, ответы и правила (заголовки http или VCL), указывающие, кэшировать ли контент.

Если вы не хотите кэшировать свой результат, у вас есть 2 решения:

1: Напишите конкретный VCL, чтобы Varnish запретил кэширование:

sub vcl_recv {
    if (req.url = "/currentTime.php") {return (pass);}
}

2: Измените заголовок управления кэшированием ответа, чтобы Varnish (и кэши прокси / браузера) не кэшировали.Я не очень хорошо знаю Symfony, но php предоставляет необходимые инструменты:

header("Pragma: no-cache");
header("cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Date in the past

Редактировать: Varnish нужен только заголовок "cache-control".

...