Apache + mod_wsgi против nginx + gunicorn

Я хочу развернуть сайт django (это код edx с открытым исходным кодом на github).

Я столкнулся с выбором между использованием

  1. Апач с mod_wsgi
  2. nginx с Gunicorn

Я использовал Apache с mod_wsgi, и это достаточно круто, но у меня нет опыта работы со вторым вариантом.

Какой из них был бы лучшим вариантом с точки зрения скорости, а также в некоторой степени простоты использования?

NB: мне нужно будет запустить два разных сайта django, скажем, на портах 80 и 81 и получить к ним доступ с двух разных поддоменов.


person SamAko    schedule 04.08.2013    source источник
comment
Апач с пушечнорогом. Ваш веб-сервер должен быть простым HTTP-прокси и ничего не знать о пушке — все, что есть у apache, — это номера портов для прокси. Ваши серверы приложений вообще не должны знать друг о друге или о том, что они живут за обратным HTTP-прокси. Apache поверх nginx исключительно потому, что у mod_proxy_http есть документы, а nginx... ну, честно говоря, документы там, где они есть, дерьмовые. Любые документы, которые вы найдёте, вероятно, устарели. (Я действительно не понимаю популярности.)   -  person AdamKG    schedule 05.08.2013
comment
О, но это суждение, я бы просто закрыл вопрос, вы не получите существенного ответа, не спровоцировав флеймовую войну, и в этот момент вопрос все равно будет закрыт.   -  person AdamKG    schedule 05.08.2013
comment
Вы можете найти это полезным: >digitalocean.com/community/tutorials/   -  person Paolo    schedule 06.01.2015


Ответы (4)


Nginx — это действительно легкое и простое в использовании решение, которое вместе с gunicorn позволяет нам запускать любое приложение wsgi и легко масштабировать его. Nginx лучше обрабатывает запросы, поскольку не создает новый процесс для каждого запроса, в отличие от Apache.

Я написал ответ о том, как развернуть django с nginx на связанный вопрос:

Развертывание проекта Django с помощью Gunicorn и nginx

person Pranjal Mittal    schedule 11.12.2013
comment
Apache поддерживает несколько моделей мультиобработки. Начиная с Apache 2.4, модуль событий mpm используется по умолчанию в большинстве Unix-подобных систем. См.: https://httpd.apache.org/docs/2.4/mpm.html. - person Laurence Rowe; 06.05.2019
comment
Не говоря уже о том, что Apache + mod_wsgi неоправданно сложно настроить с помощью django. А если вы тоже хотите использовать докер? Забудь об этом. Головная боль в течение нескольких дней. - person NoName; 28.10.2020

Ну, несколько миллисекунд, которые вы получаете с Nginx, не будут иметь большого значения по сравнению со временем, которое занимают другие процессы. Nginx может экономить оперативную память, но это будет иметь большое значение только на серверах с небольшим объемом оперативной памяти. Для конкретного использования на большом веб-сайте могут быть некоторые более заметные различия, но тогда это станет делом эксперта.

Настоящая разница для большинства, вероятно, заключается в простоте обучения. Я не считаю Apache сложным в использовании, а документ чистый. Однако большинство руководств по Python, которые я нашел, посвящены использованию Nginx с Gunicorn.

Если вы уже знаете, как использовать Apache с Python, вероятно, будет проще использовать его, если только вы не хотите изучать Nginx, чтобы улучшить свое резюме.

Однако, если вы новичок, есть дополнительная документация по Nginx с Python. Это делает его более легким вариантом.

person Xiiryo    schedule 26.02.2019

У меня хороший опыт работы с nginx и gunicorn. Они продолжают отлично работать, когда я, наконец, правильно установил все настройки и запустил их.

Для nginx и gunicorn это:

* nginx configuration files (/etc/nginx/sites-enabled/ and /etc/nginx/nginx.conf)
* gunicorn configuration files (/etc/init/gunicorn.conf and /etc/gunicorn.d/) 

Я видел учебник для apache + mod_wsgi, и кажется, что его намного проще настроить.

person Jdruiter    schedule 16.09.2015

В основном я работал с nginx и gunicorn. В настоящее время я работаю с apache + mod_wsgi. На самом деле это легко, если ваша версия Python 2.7, потому что mod_wsgi при установке непосредственно из менеджера пакетов будет работать нормально. Но если ваш код находится в другой версии Python. mod_wsgi должен быть собран из исходников той же версии. Если вы установили свой Python также из исходного кода, то процедура, чтобы заставить работать все веб-приложение, довольно сложна.

Nginx и gunicorn, с другой стороны, не имеют проблем с версией, поскольку параметр proxypass позволяет легко пересылать запросы на gunicorn. Все, что нам нужно, это убедиться, что gunicorn работает с той же версией Python, что и ваш код.

person Kaustubh Desai    schedule 27.07.2020
comment
Я знаю, что это устарело, но работа с Python 2.7 в июле 2020 года не была разумным шагом... Python 2 устарел 1 января 2020 года. - person Hussam; 04.03.2021