Apache + mod_wsgi 与 nginx + gunicorn
Posted
技术标签:
【中文标题】Apache + mod_wsgi 与 nginx + gunicorn【英文标题】:Apache + mod_wsgi vs nginx + gunicorn 【发布时间】:2013-08-05 13:53:50 【问题描述】:我想部署一个django站点(是github上的开源edx代码)。
我面临着在使用之间做出选择
-
带有 mod_wsgi 的 Apache
带有 gunicorn 的 nginx
我使用 Apache 和 mod_wsgi,它很酷,但我没有使用第二个选项的经验。
在速度方面以及在某种程度上,在易用性方面,哪一个是更好的选择?
注意:我需要在端口 80 和 81 上运行两个不同的 django 站点,并从两个不同的子域访问它们。
【问题讨论】:
带有 gunicorn 的 Apache。您的网络服务器应该是一个纯粹简单的 HTTP 代理,并且不应该对 gunicorn 有任何了解 - apache 所拥有的只是要代理的端口号。您的应用程序服务器根本不应该相互了解,或者它们生活在 HTTP 反向代理中。 Apache over nginx 纯粹是因为 mod_proxy_http 有文档,而 nginx ......好吧,坦率地说,文档在它们存在的地方很糟糕。您确实找到的任何文档都可能已过时。 (我真的没有得到普及。) 哦,但是,这是一个判断电话,我只是关闭问题,如果不引发火焰战争,您将无法获得实质性答案,此时,问题将被关闭. 您可能会发现这很有用digitalocean.com/community/tutorials/… 【参考方案1】:嗯,您使用 Nginx 获得的几毫秒不会对其他进程花费的时间产生太大影响。 Nginx 可能会节省 RAM,但只有在具有少量 RAM 的服务器上才会有很大的不同。对于大型网站上的特定用途,可能会有一些更显着的差异,但这将成为专家的事情。
对大多数人来说,真正的区别可能是易于学习。我不觉得 Apache 特别难用,而且文档很干净。然而,我发现的大多数 Python 教程都是关于将 Nginx 与 Gunicorn 结合使用。
如果您已经知道如何将 Apache 与 Python 一起使用,那么使用它可能会更直接,除非您也想学习 Nginx 以提高您的简历。
但是,如果您是新手,这里有更多关于 Nginx 和 Python 的文档。它使它成为更容易的选择。
【讨论】:
【参考方案2】:我主要使用 nginx 和 gunicorn。我目前正在使用 apache + mod_wsgi。如果您的 Python 版本是 2.7,这实际上很容易,因为直接从包管理器安装 mod_wsgi 将正常工作。但是,如果您的代码使用不同的 Python 版本。 mod_wsgi 必须从具有相同版本的源代码构建。如果您也从源代码安装了 Python,那么让整个 Web 应用程序正常工作的过程相当困难。
另一方面,Nginx 和 gunicorn 没有任何版本问题,因为 proxypass 参数可以轻松地将请求转发到 gunicorn。我们只需要确保 gunicorn 与您的代码所在的 Python 版本相同。
【讨论】:
我知道这已经过时了,但在 2020 年 7 月使用 Python 2.7 并不是明智之举……Python 2 已于 2020 年 1 月 1 日被弃用【参考方案3】:我对 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 的教程,而且设置起来似乎要简单得多。
【讨论】:
【参考方案4】:Nginx 是一个非常轻量且易于使用的解决方案,与 gunicorn 一起,它允许我们运行任何 wsgi 应用程序并轻松扩展它。 Nginx 更擅长处理请求,因为它不像 Apache 那样为每个请求生成一个新进程。
我已经为一个相关问题写了一个关于如何使用 nginx 部署 django 的答案:
Deploying Django project with Gunicorn and nginx
【讨论】:
Apache 支持多种多处理模型。从 Apache 2.4 开始,事件 mpm 模块是大多数类 unix 系统的默认模块。见:httpd.apache.org/docs/2.4/mpm.html 更不用说 Apache + mod_wsgi 用 django 设置起来非常困难。如果你也想使用 docker?忘掉它。头痛好几天。以上是关于Apache + mod_wsgi 与 nginx + gunicorn的主要内容,如果未能解决你的问题,请参考以下文章
使用 DotCloud 使用 apache + mod_wsgi + postgresql + nginx + memchache 部署 Django 应用程序
Windows Apache + mod_wsgi 环境配置