У меня есть приложение django, и я хочу установить Varnish на сервере перед ним. В другой поток сбоя сервера кто-то предложил поставить Nginx перед Varnish.
Стоит ли ставить Nginx перед Varnish на кеширующем сервере? Если да, следует ли использовать Nginx на сервере приложений?
Речь идет об 1–3 интерфейсных серверах, а не о большой серверной ферме с балансировкой нагрузки между уровнями?
Размещение nginx перед Vanish позволяет выполнять HTTP-сжатие на лету. Это лучшая практика для производительности, но от нее можно отказаться. (Контент в Varnish часто сохраняется в несжатом виде, поэтому ESI Includes работают, и вам не нужно иметь дело с несколькими кэшированными версиями одного и того же объекта в зависимости от соответствия заголовка Vary / браузера.)
Что касается nginx на сервере приложений - это Apache с mod_wsgi не рекомендуемый и наиболее распространенный способ развертывания новых установок Django в настоящее время? Я не знаю веских причин для использования nginx / fastcgi вместо Apache / mod_wsgi для Django; но вам следует посоветоваться с экспертом по Django.
Что касается Varnish, обладающего привлекательными функциями балансировки нагрузки, которых нет в nginx, я не понимаю, что это такое? Varnish имеет случайную и циклическую балансировку. nginx имеет циклический перебор, клиентский IP и последовательное хеширование - я не вижу значительных преимуществ для Varnish? Это изящная перезагрузка конфигурации VCL или Varnish или что-то еще?
Для небольшой настройки сервера 1-3 я бы просто сделал
Лак -> Apache / mod_wsgi / Django
или, может быть
Squid -> Apache / mod_wsgi / Django
и игнорируйте сжатие HTTP для простоты, если пропускная способность не является дорогостоящей.
Обновить:
Грэм Дамплтон написал ниже ценный комментарий. Он упоминает очень распространенную настройку, например, блог на VPS или небольшую веб-ферму без кеширования:
nginx -> Apache / mod_wsgi / Django
Это очень хорошее решение по нескольким причинам:
Причина, по которой я не упомянул об этом изначально, заключается в том, что OP, похоже, требовал Varnish, очень высокопроизводительное решение для кэширования. Комбинация nginx / Apache / mod_wsgi не может выполнять кэширование с уровнем производительности и гибкости, который соответствует Varnish.
Я успешно использую Nginx, Varnish и Apache / mod_wsgi / Django. Я начал со следующей конфигурации:
Nginx -> Apache/mod_wsgi/Django
Как только я начал замечать значительную нагрузку на Apache, я добавил Varnish:
Nginx -> Varnish -> Apache/mod_wsgi/Django
Я использую Nginx как своего рода «URL-маршрутизатор». Запросы администратора Django отправляются напрямую из Nginx в Apache. Клиентские запросы отправляются из Nginx в Varnish, который кэширует запросы от Apache, а также обслуживает «выделенные» элементы из кеша, если серверы приложений недоступны.
Мой сервер Nginx также напрямую обслуживает определенный статический контент (например, изображения, файлы CSS и javascript).
В целом производительность отличная. Я заметил несколько предостережений, о которых следует упомянуть:
Вы можете использовать nginx без лака для прокси и кеширования контента.
Я использую Nginx-> Varnish-> uWSGI-> Django