我想部署一个 django 站点(它是 github 上的开源 edx 代码)。
我面临着在使用之间做出选择
- 带有 mod_wsgi 的 Apache
- nginx 与 gunicorn
我已经将 Apache 与 mod_wsgi 一起使用,它很酷,但我对第二个选项没有经验。
在速度方面以及在某种程度上,易用性方面,哪一个是更好的选择?
注意:我需要在端口 80 和 81 上运行两个不同的 django 站点,并从两个不同的子域访问它们。
Nginx是一个非常轻巧且易于使用的解决方案,它与gunicorn一起允许我们运行任何 wsgi 应用程序并轻松扩展它。Nginx 更擅长处理请求,因为它不像 Apache 那样为每个请求生成一个新进程。
我已经为一个相关问题写了一个关于如何使用 nginx 部署 django 的答案:
好吧,您使用 Nginx 获得的几毫秒不会对其他进程花费的时间产生巨大的影响。Nginx 可能会节省 RAM,但只有在具有少量 RAM 的服务器上才会有很大的不同。对于大型网站上的特定用途,可能会有一些更显着的差异,但这将成为专家的事情。
对大多数人来说,真正的区别可能是易于学习。我不觉得 Apache 特别难用,而且文档很干净。然而,我发现的大多数 Python 教程都是关于将 Nginx 与 Gunicorn 结合使用。
如果您已经知道如何将 Apache 与 Python 一起使用,那么使用它可能会更直接,除非您也想学习 Nginx 来提高您的简历。
但是,如果您是新手,这里有更多关于 Nginx 和 Python 的文档。它使它成为更容易的选择。
我对 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 的教程,设置起来似乎要简单得多。
我主要使用 nginx 和 gunicorn。我目前正在使用 apache + mod_wsgi。如果您的 Python 版本是 2.7,这实际上很容易,因为直接从包管理器安装 mod_wsgi 将正常工作。但是,如果您的代码使用不同的 Python 版本。mod_wsgi 必须从具有相同版本的源代码构建。如果你也从源代码安装了 Python,那么让整个 Web 应用程序工作的过程相当困难。
另一方面,Nginx 和 gunicorn 没有任何版本问题,因为 proxypass 参数可以很容易地将请求转发到 gunicorn。我们需要确保的是 gunicorn 使用与您的代码相同的 Python 版本运行。