我一直在使用manage.py runserver
来运行我的初学者Django项目。我看到建议改用gunicorn
。这两者有什么区别?
我一直在使用manage.py runserver
来运行我的初学者Django项目。我看到建议改用gunicorn
。这两者有什么区别?
Nginx和Gunicorn可能是生产部署中最受欢迎的配置。在详细介绍为什么推荐Gunicorn而不是runserver之前,让我们快速澄清一下Nginx和Gunicorn之间的区别,因为它们都声称自己是Web服务器。
NGINX应该是您与公众互动的入口点,它是监听端口80(http)和443(https)的服务器。它的主要目的是处理HTTP请求,即应用重定向、HTTP身份验证(如果需要)、管理TSL/SSL证书以及-除其他事项外-决定您的请求最终要去哪里。例如,可能有一个运行在localhost:3000
上并等待来自/foo/api
的请求的node.js应用程序,而gunicorn则在localhost:8000
上等待为您的精彩应用提供服务。将传入的请求代理到所谓的upstream
服务(在这种情况下为node.js和gunicorn)的此功能称为反向代理。
GUNICORN是一个将HTTP请求转换为Python的服务器。WSGI是其中一个接口/实现,可以做到这一点(例如,HTTP头的文本部分被转换为键值字典)。
Django的内置开发Web服务器(在运行manage.py runserver
时获得)也提供了此功能,但它针对的是开发环境(例如,在代码更改时重新启动),而Gunicorn则面向生产环境。
Gunicorn有许多Django内置服务器缺少的功能:
除了Gunicorn之外还有其他Web服务器,但是Gunicorn(受Ruby的独角兽启发)非常受欢迎且易于设置,因此不仅是一个很好的起点,而且是大型项目使用的专业解决方案。
manage.py runserver 只是一个开发服务器,绝不能在任何情况下用于生产环境。 当你的Django项目准备好进入部署阶段时,你需要使用类似Apache、uWSGI、NGINX或其他服务器来为其提供服务。