Назад | Перейти на главную страницу

Nginx Varnish Nginx Django?

У меня есть приложение 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

Это очень хорошее решение по нескольким причинам:

  1. Простая установка
  2. nginx, обладающий высокой скоростью и минимальными накладными расходами, обрабатывает обслуживание статических файлов и поддержку соединения с браузером.
  3. Django работает на отличной платформе 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).

В целом производительность отличная. Я заметил несколько предостережений, о которых следует упомянуть:

  1. На загруженном сайте перезапуск Varnish может вызвать резкий скачок нагрузки на серверы приложений, поэтому рекомендуется свести перезапуски Varnish к минимуму. (Varnish, похоже, не имеет «перезагрузки», как Nginx / Apache, где он просто перечитывает свои файлы VCL). И наоборот, перезагрузка конфигурации Nginx оказывает минимальное влияние. По этой причине я выполняю большую часть операций по перезаписи URL и «маршрутизации» в Nginx.
  2. Varnish легко найти между Nginx и Apache. Если вы начинаете замечать высокую нагрузку на серверы приложений, добавление лака даже с конфигурацией по умолчанию действительно может иметь значение.
  3. Если вы все же используете Varnish, вам определенно нужно подумать о том, как вы собираетесь обрабатывать недействительность кеша.
  4. Мой опыт показывает, что Varnish обрабатывает отказавшие серверные части немного более изящно, чем Nginx (как вы указали ранее).

Вы можете использовать nginx без лака для прокси и кеширования контента.

Я использую Nginx-> Varnish-> uWSGI-> Django