Django:通过 manage.py 使用服务器与 gunicorn 等其他服务器之间的区别。哪个更好?

Django: Difference between using server through manage.py and other servers like gunicorn etc. Which is better?

我 运行 我的初学者 Django 项目 manage.py runserver。我看到了改用 gunicorn 的建议。有什么区别?

manage.py runserver 只是一个开发服务器,在任何情况下都不适合生产。一旦准备好部署,您需要使用 Apache、uWSGI、NGINX 或其他服务器来为您的 Django 项目提供服务。

nginx 和 gunicorn 可能是最流行的生产部署配置。在详细说明为什么推荐 gunicorn 而不是 运行server 之前,让我们快速弄清楚 nginx 和 gunicorn 之间的区别,因为它们都声明它们是 web 服务器。

NGINX 应该是您进入 public 的入口点,它是侦听端口 80 (http) 和 443 (https) 的服务器。它的主要目的是 处理 HTTP 请求 ,即应用重定向、HTTP 身份验证(如果需要)、管理 TSL/SSL 证书以及 - 除其他事项外 - 决定您的请求最终去向。例如。 localhost:3000 上可能有一个 node.js 应用程序在 /foo/api 上等待请求,而 gunicorn 在 localhost:8000 上等待为您的应用程序提供服务。这种将传入请求代理到所谓的 upstream 服务(在本例中为 node.js 和 gunicorn)的功能称为 reverse-proxy.

GUNICORN 是一个 将 HTTP 请求转换为 Python 的服务器。 WSGI 是 interfaces/implementations 之一(例如,http headers 的文本部分被转换为 key-value 字典)。

Django 的 built-in 开发网络服务器 (当你 运行 manage.py runserver 时得到的)也提供了该功能,但它针对开发环境(例如,代码更改时重新启动),而 Gunicorn 以生产为目标。

Gunicorn 有许多 Django 的 built-in 服务器所缺乏的功能:

  • gunicorn 可以生成多个工作进程以将传入请求并行化到多个 CPU 核心
  • gunicorn 有更好的日志记录
  • gunicorn 通常针对速度进行了优化
  • gunicorn 可以 根据您的设置配置为精细等级
  • gunicorn 是 积极设计和维护安全性

除了 gunicorn 之外还有网络服务器,但是 gunicorn(受 ruby 的 unicorn 启发)非常流行并且易于设置,因此不仅是一个很好的起点,而且是一个专业的解决方案被大型项目使用。