Apache или Nginx для обслуживания приложений Django?
Я хочу развернуть веб-приложение Django, и, следовательно, мне нужно выбрать веб-сервер для обслуживания файлов Python.
Я должен упомянуть, что мой производственный сайт будет находиться на одном сервере, на котором будут размещаться база данных и веб-сервер. По мере получения импульса я стремлюсь переместить базу данных на выделенный сервер и т. Д.
Вот мои вопросы:
- Должен ли я использовать один веб-сервер или два? Контекст этого вопроса заключается в том, что многие люди рекомендуют использовать NginX для обслуживания статических медиафайлов и Apache для обслуживания Python, что вызывает следующие вопросы:
- Почему мы не можем использовать только один сервер. Я понимаю, что Apache иногда может быть чудовищем, поэтому я подозреваю, что люди используют NginX для обслуживания ОБА статических медиафайлов и файлов python.
- Если используется один сервер, что лучше, Apache или NginX. У меня есть опыт работы с Apache, но я слышал только хорошие новости о NginX.
- Каковы преимущества использования FastCGI по сравнению с mod_wsgi?
Спасибо заранее
7 ответов
Должен ли я использовать один веб-сервер или два? Контекст этого вопроса заключается в том, что многие люди рекомендуют использовать NginX для обслуживания статических медиа-файлов и Apache для обслуживания Python, что вызывает следующие вопросы: Почему мы не можем использовать только один сервер. Я понимаю, что Apache иногда может быть чудовищем, поэтому я подозреваю, что люди используют NginX для обслуживания ОБА статических медиафайлов и файлов python.
Если в настоящее время у вас нет других сайтов, которые уже настроены тем или иным образом, или вам нужны определенные функции, которые являются взаимоисключающими между различными серверами, я не вижу причин для использования нескольких серверов. Это просто добавляет ненужную сложность и конфигурацию.
Если используется один сервер, что лучше, Apache или NginX. У меня есть опыт работы с Apache, но я слышал только хорошие новости о NginX.
Как и во всех вопросах "что лучше", это обычно вопрос предпочтения. И чтобы получить конкретный ответ, вам, вероятно, нужно задать более конкретные вопросы.
Если у вас уже есть опыт работы с конкретным сервером, и вы просто хотите быстро запустить его, я бы посоветовал перейти к тому, что вы уже знаете. Вы всегда можете переключиться на другой веб-сервер позже. С другой стороны, это хорошая возможность узнать об альтернативах.
tl; dr: я бы пошел на то, что проще в настройке и управлении. Лично я бы выбрал nginx и gunicorn, главным образом потому, что это легко и есть много ресурсов, доступных, если вы застряли.
Я бы не стал сильно беспокоиться о производительности, пока вам это не понадобится. Все основные веб-серверы опробованы и протестированы, поэтому в основном все сводится к требованиям приложения и реальной нагрузке, которая в любом случае требует мониторинга, моделирования и тестирования для тонкой настройки.
Каковы преимущества использования FastCGI по сравнению с mod_wsgi?
Различия и использование между WSGI, CGI, FastCGI и mod_python по отношению к Python?
статьи для чтения (некоторые старые, некоторые новые);
- http://gunicorn-docs.readthedocs.org/en/latest/deploy.html
- https://docs.djangoproject.com/en/dev/howto/deployment/
- http://serversforhackers.com/editions/2014/03/25/nginx/
- http://blog.dscpl.com.au/2009/05/blocking-requests-and-nginx-version-of.html
- http://www.thegeekstuff.com/2013/11/nginx-vs-apache/
- http://raspberrywebserver.com/raspberrypicluster/comparing-the-performance-of-nginx-and-apache-web-servers.html
- http://www.bearfruit.org/2013/04/19/reddit-is-melting-our-server-heres-what-we-did-nginx-apache-django-and-mysql/
- В производстве Apache + mod_wsgi или Nginx + mod_wsgi?
- http://www.peterbe.com/plog/fcgi-vs-gunicorn-vs-uwsgi
- http://www.aosabook.org/en/nginx.html
- http://c2.com/cgi/wiki?PrematureOptimization
Я думаю, что лучший выбор - это virtualenv, uwsgi и nginx. Я изменил все свои серверы сейчас, и я действительно доволен производительностью.
Вот хороший учебник о том, как настроить ваш веб-сервер http://senya.pl/2011/03/sexy-nginx-uwsgi-stack-for-django-with-virtualenv/
Я не уверен, кто рекомендует вам использовать Nginx и Apache, но это ужасная идея. Какой бы вариант вы ни выбрали, любой из них будет просто выступать в качестве обратного прокси-сервера, обслуживая только статические ресурсы и передавая все остальное подпроцессу, например, uwsgi.
Я предпочитаю Nginx, потому что он легкий и очень быстрый из коробки. Apache может быть таким же хорошим, но требует сборки из исходного кода и точного знания, какую конфигурацию использовать для соответствия Nginx. Однако Apache имеет больше возможностей и с ним немного проще работать. Это действительно зависит от вас и потребностей вашего приложения.
Однако, какой бы вы ни выбрали, вам нужен только один, а не оба.
Вопрос 1) Вы можете использовать только один сервер, но для обслуживания статических носителей решение вроде lighttpd или nginx будет намного быстрее. Я бы остановился на Apache, если вы действительно хотите использовать только один сервер, он обладает всей необходимой гибкостью и является наиболее распространенным веб-сервером.
Вопрос 2) Зависит от вашей цели. Вы можете найти информацию здесь: Развертывание Django (fastcgi, apache mod_wsgi, uwsgi, gunicorn)
Я пытался перейти по предложенной ссылке Nicowernli, но senya.pl в этот момент не работал. Это похоже на хороший альтернативный учебник.... Попробую, просто прочитайте первые 2 главы, но кажется очень полным и действительно пошаговым:
- Чем меньше, тем лучше.
- Лучший способ развернуть приложение Django поверх Nginx - использовать uwsgi. Это чистый WSGI и встроенный поддерживается новой версией Nginx.
Я использовал gunicorn + eventlet в качестве сервера Python и nginx в качестве обратного прокси с большим успехом. Недавно я перешел на uWSGI, и кажется, что это будет хорошим решением, если не лучшим. Я еще не попробовал apache и Django, хотя до использования Django я был пользователем apache. Вот хорошая статья о том, как все это сделать: http://radtek.ca/blog/django-production-deployment-via-nginx-and-gunicorn-and-virtualenv/