Как правильно настроить Varnish для сайтов Symfony2?

У меня есть веб-сайт (с ESI), который использует обратный прокси-сервер Symfony2 для кэширования. Средний ответ составляет около 100 мс. Я попытался установить Varnish на сервере, чтобы опробовать его. Я шаг за шагом следовал руководству из поваренной книги Symfony , удалил все в папке cache , но папка http_cache все еще была создана, когда я попробовал. Итак, я решил, что могу попробовать закомментировать $ kernel = new AppCache ($ kernel); из app.php . Это сработало очень хорошо. http_cache больше не создавался, а с помощью varnishstat Varnish, похоже, работал:

12951         0.00         0.08 cache_hitpass - Cache hits for pass
 1153         0.00         0.01 cache_miss - Cache misses

Это было из примерно 14000 запросов, поэтому я подумал, что все будет в порядке.Но после повторения я обнаружил, что отклики увеличились до ~ 2 секунд.

Apache работает на порту 9000, а Varnish - на 8080. Поэтому я повторяю, используя echoping -n 10 -h http: // servername / X.X.X.X: 8080 .

Понятия не имею, что могло быть не так. Требуются ли какие-либо дополнительные настройки для использования Varnish с Symfony2? Или я просто что-то делаю не так?


По запросам, вот мой default.vcl с изменениями, которые я сделал до сих пор.

Я обнаружил 2 проблемы с конфигурацией Varnish по умолчанию:

  • он не кэширует запросы с помощью файлов cookie (и всем в моем приложении назначен сеанс)
  • он игнорирует Cache-Control: no-cache header

Итак, я добавил условия для этих случаев в свою конфигурацию, и теперь она работает довольно хорошо (~ 175 запросов / с вместо ~ 160 с обратным прокси-сервером S2 - но, честно говоря, я ожидал немного большего). Я просто не знаю, как проверить, все ли в порядке, поэтому любые комментарии приветствуются.

У большинства страниц кэш зависит от файлов cookie, с s-maxage 1200. Общие ESI-файлы не зависят от файлов cookie, при этом s-maxage довольно низкое (статьи, статьи списки). Страницы профилей пользователей вообще не кэшируются ( no-cache ), и я не совсем уверен, что ESI, включенный в них, даже кэширует Varnish. Только ESI, который зависит от файлов cookie, является заголовком с пользовательской информацией (которая находится на 100% страниц).

Все в этом посте специфично для Varnish 3.X (я лично использую 3.0.2).

Кроме того, после нескольких недель вникания в это я действительно понятия не имею, что я делаю, поэтому, если вы обнаружите что-то странное в конфигах, просто дайте мне знать.

enter image description here

31
задан Ondrej Slinták 3 February 2012 в 16:31
поделиться