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

时间:2016-02-26 16:49:21

标签: python django server

我使用manage.py创建了初学者项目,现在在sqllite之后转移到postgres。许多人建议使用gunicorn?有什么区别?

2 个答案:

答案 0 :(得分:29)

最流行的设置是nginx和gunicorn。所以在我们讨论为什么建议使用gunicorn而不是runserver之前,让我们快速澄清nginx之间的区别 - 因为两者都声称他们是网络服务器:)

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

GUNICORN 将HTTP请求转换为python 的服务器。有一些名为WSGI的规范。 Django在网络服务器中的构建也是如此。 manage.py runserver定位开发(例如,通过自动重新启动更改)。 Gunicorn瞄准生产。它有许多功能,缺乏服务器中的内置功能。例如。它可以产生多个工作进程以将传入请求并行化到多个cpu核心,它具有正确的日志记录,通常针对速度进行了优化,可以根据您的设置配置为非常好的等级,并且非常主动地检查安全问题。

还有其他网络服务员与gunicorn竞争,但gunicorn(最初受红宝石独角兽的启发)非常受欢迎且易于设置,因此不仅是一个非常好的起点,而且是一个非常专业的解决方案,由非常大的项目。

答案 1 :(得分:7)

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