Мы стремимся использовать nginx + uwsgi для приложений на основе django, так как мы хотим попробовать более новые решения и хорошо слышали о том, что nginx менее ресурсоемкий, чем apache.
Прочитав несколько мнений одного из создателей Django об apache на Quora:
http://www.quora.com/What-web-server-suits-Django-best
I'm still a big fan of a stripped down Apache+mod_wsgi running behind nginx.
Nginx handles static files, gzip, trickling to slow clients, load balancing and
having a configuration language that's actually pleasant to work with.
Apache just sits there serving up dynamic Python pages via mod_wsgi, using the
shortest possible config.The reason I like Apache for this is I don't need to
babysit the process at all, unlike if I was using FastCGI or running a separate
Python app server.
Я не собираюсь настраивать 2 веб-сервера для разных целей, я был бы более счастлив, если бы только nginx выполнял всю работу вместе с uwsgi для django. У меня несколько вопросов:
Что подразумевается под «вообще не нужно присматривать за процессом»? Нужны ли nginx + uwsgi дополнительные усилия по сравнению с apache + mod_wsgi?
Говорят, что Nginx имеет встроенную поддержку uwsgi, а не gunicorn, что это значит?
Часть "присмотра за детьми" - это запуск процессов uWSGI / gunicorn вручную (с помощью таких инструментов, как supervisor, monit или простые сценарии rc).
Более года назад uWSGI решил эту «проблему» с uWSGI Emperor, который очень легко будет присматривать за экземплярами (просто перетащите файлы конфигурации в каталог). Таким образом, для одной установки требуется сценарий запуска для nginx и один для apache, в то время как для другого требуется один для nginx и один для uWSGI Emperor (так что у нас 2: 2).
Что касается поддержки uwsgi в nginx, это связано с «протоколом uwsgi», а не с сервером приложений uWSGI. Это более простой транспорт, чем http, поэтому он может принести некоторый выигрыш в производительности и добавить некоторые специфические функции (например, прямую передачу переменных WSGI). Вы не обязаны использовать протокол uwsgi, вы можете просто запустить uWSGI в режиме http (как gunicorn) и обычно проксировать его.
Сказав это, примите во внимание, что текущая база кода python uWSGI очень похожа на mod_wsgi (автор mod_wsgi очень помог исправить ошибки uWSGI python), поэтому, если вам не нужны определенные функции uWSGI, вы не получите особых преимуществ перед действительно урезанный apache + mod_wsgi.