33

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

4

2 回答 2

76

nginx 和 gunicorn 可能是生产部署中最流行的配置。在详细说明为什么推荐 gunicorn 而不是 runserver 之前,让我们快速澄清一下 nginx 和 gunicorn 之间的区别,因为两者都声明它们是 Web 服务器。

NGINX应该是你对公众的入口点,它是监听端口 80 (http) 和 443 (https) 的服务器。它的主要目的是处理 HTTP 请求,即应用重定向、HTTP Auth(如果需要)、管理 TSL/SSL 证书以及 - 除其他外 - 决定您的请求最终将发送到哪里。例如,可能有一个 node.js 应用程序localhost:3000正在等待请求,/foo/api而 gunicorn 正在等待localhost:8000为您的出色应用程序提供服务。这种将传入请求代理到所谓的upstream服务(在本例中为 node.js 和 gunicorn)的功能称为反向代理。

GUNICORN是一个将 HTTP 请求转换为 Python的服务器。WSGI 是执行此操作的接口/实现之一(例如,http 标头的文本部分被转换为键值字典)。

Django 的内置开发Web 服务器(运行时得到的manage.py runserver)也提供了该功能,但它针对的是开发环境(例如,在代码更改时重新启动),而Gunicorn 针对的是生产环境。

Gunicorn 有许多 Django 内置服务器所缺乏的特性:

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

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

于 2016-02-26T20:00:54.300 回答
8

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

于 2016-02-26T17:04:53.427 回答