У меня есть веб-сайт (с ESI), который использует обратный прокси-сервер Symfony2 для кэширования. Среднее время отклика составляет около 100 мс. Я попытался установить Varnish на сервер, чтобы попробовать. Я шаг за шагом следовал руководству из кулинарной книги Symfony, удалил все в cache
папка, но папка http_cache
все еще была создана, когда я пробовал. Поэтому я решил, что могу попытаться закомментировать $kernel = new AppCache($kernel);
из app.php
. Это сработало очень хорошо. http_cache
больше не создавался, и 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
Поэтому я добавил условия для этих случаев в свою конфигурацию, и теперь она работает довольно хорошо (~ 175 запросов в секунду по сравнению с ~ 160 с обратным прокси-сервером S2 — но, честно говоря, я ожидал немного большего). Я просто понятия не имею, как проверить, все ли в порядке, поэтому любые входные данные приветствуются.
Кэш большинства страниц зависит от файла cookie, с s-maxage
1200. Обычные включения ESI не зависят от файла cookie, с довольно низким s-maxage
(статьи, списки статей). Страницы профилей пользователей вообще не кэшируются (no-cache
), и я не совсем уверен, что Varnish даже кэширует их в ESI. Только ESI, который изменяется с помощью файлов cookie, представляет собой заголовок с информацией о пользователе (это на 100% страниц).
Все в этом посте относится к Varnish 3.X (лично я использую 3.0.2).
Кроме того, после нескольких недель копания в этом, я действительно понятия не имею, что я делаю, поэтому, если вы найдете что-то странное в конфигах, просто дайте мне знать.
sub vcl_recv
,sub vcl_fetch
иbackend
? - person Anton Babenko   schedule 20.01.2012vcl_recv
, хотя там тоже есть эти строчки:set req.http.X-Forwarded-Port = "80"; set req.http.X-Forwarded-Proto = "http";
- person Anton Babenko   schedule 20.01.2012