Apache или Nginx для обслуживания приложений Django?

Я хочу развернуть веб-приложение Django, и, следовательно, мне нужно выбрать веб-сервер для обслуживания файлов Python.

Я должен упомянуть, что мой производственный сайт будет находиться на одном сервере, на котором будут размещаться база данных и веб-сервер. По мере получения импульса я стремлюсь переместить базу данных на выделенный сервер и т. Д.

Вот мои вопросы:

  1. Должен ли я использовать один веб-сервер или два? Контекст этого вопроса заключается в том, что многие люди рекомендуют использовать NginX для обслуживания статических медиафайлов и Apache для обслуживания Python, что вызывает следующие вопросы:
    1. Почему мы не можем использовать только один сервер. Я понимаю, что Apache иногда может быть чудовищем, поэтому я подозреваю, что люди используют NginX для обслуживания ОБА статических медиафайлов и файлов python.
    2. Если используется один сервер, что лучше, Apache или NginX. У меня есть опыт работы с Apache, но я слышал только хорошие новости о NginX.
  2. Каковы преимущества использования 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?


статьи для чтения (некоторые старые, некоторые новые);

Я думаю, что лучший выбор - это 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 главы, но кажется очень полным и действительно пошаговым:

http://www.abidibo.net/blog/2012/04/30/deploy-django-applications-nginx-uwsgi-virtualenv-south-git-and-fabric-part-1/

  1. Чем меньше, тем лучше.
  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/

Другие вопросы по тегам