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