У меня есть производственное приложение Rails, развернутое на Unicorn с nginx впереди для обслуживания статических файлов. Теперь мне нужны некоторые функции Varnish, и мне интересно, как их внедрить.
Некоторые ставят Varnish впереди, а другие - nginx. Я не слышал, чтобы кто-нибудь использовал просто Лак и Единорог, но я полагаю, что это действительно так.
Те, у кого впереди nginx, похоже, делают это для завершения gzip и SSL. SSL не имеет отношения к моему приложению, но gzip имеет значение. Думаю, скоро это появится лак, так что я смогу некоторое время прожить без него в интересах простоты.
Есть ли другие плюсы / минусы у любого подхода? Есть ли для этого каноническая передовая практика?
Heroku (например) ставит nginx перед лаком вероятно, по причинам, о которых вы упомянули.
Итак, nginx -> varnish -> серверы приложений.
В своей работе мы перед всем используем Varnish (varnish -> nginx -> apache / wsgi), и он работает очень хорошо. Считается, что при попадании в кеш он обслуживается из самой высокой точки стека. Однако есть несколько причуд. VCL очень специфичен для своей задачи и поэтому немного затрудняет выполнение таких вещей, как перенаправление (например, для обнаружения мобильных устройств), с которыми nginx может справиться довольно легко. В общем, он просто немного менее гибкий, поскольку это не совсем то, для чего он предназначен.
Как правило, из того, что я читал (и исходя из моего опыта работы), вероятно, лучше поставить nginx перед стеком с лаком между ним и серверами приложений.
Единственным недостатком этого подхода при использовании Unicorn является то, что вы не сможете использовать метод сокета unix с nginx и unicorn, поскольку вам придется использовать лак между ними, а лак их не поддерживает. Хотя это, наверное, мелочь.
ОБНОВИТЬ: Чтобы узнать о некоторых дополнительных, более конкретных причинах выбора одного из них, ознакомьтесь с комментарии к этому ответу. Это зависит от того, требуется ли вам сжатие SSL, ESI или gzip.