Django,为什么我在托管期间需要 nginx 和 uWSGI?

Ano*_*rge 7 django nginx uwsgi

我有在 Pythonanywhere 平台上托管简单 Django 项目的经验(我不必安装 nginx 和 uWSGI)。

许多人将 nginx+Uwsgi 与 Django 一起使用,为什么需要?

我希望 nginx 是一个 Web 服务器、负载均衡器、邮件代理和 HTTP 缓存。Uwsgi 是一个 webs 服务器网关接口。

Heroku/Pythonanywhere 平台中是否默认包含所有这些内容?

Gil*_*mas 9

PythonAnywhere 开发人员在这里:是的,没错——我们确实安装了 nginx 和 uWSGI。当您在我们网站的“Web”页面上创建网站时,幕后发生的事情是(稍微简化一点)我们为您生成适当的 nginx/uWSGI 配置文件并启动一切,以便您只需要工作Django 代码。

之所以需要这些工具(或类似的工具,如 Apache 和 mod_wsgi),是因为 Django 的内置网络服务器不是为生产使用而设计的。你可以运行它的“manage.py runserver”命令让它在你自己的机器上提供页面,但它使用的系统不是为了安全或效率而设计的——它只是为你提供了一种运行的简单方法用于调试目的。其他 Python Web 框架(如 Flask 和 web2py)的内置 Web 服务器也是如此。

nginx 旨在快速、高效和安全,因此当您的网站位于公共 Internet 上并因此受到大量流量的影响时,它是处理传入 Web 请求的更好选择(如果您很幸运并且您的网站起飞)以及黑客的滥用。当然,这并不是说它会自动使您的网站快速和安全,但这至少意味着您开始使用正确的系统。它在提供静态文件(如 CSS、JavaScript、图像等)方面也比 Django 好得多,因为它就是为此而构建的。

uWSGI 旨在接收传入的 Web 请求并快速有效地将处理它们委托给多个工作进程,然后整理响应并将它们发送回 nginx。

当然,理论上所有这些都可以内置到 Django 中——但是 Django 团队要做到这一点需要很多工作,而且他们重新发明轮子而不是浪费时间专注于 Django 提供其真正优势的领域,使快速开发复杂网站变得容易。