好的,大家之所以感到困惑是因为多个来源缺乏细节说明,以及这些协议的命名以及WSGI的实际含义。
总结:
python manage.py runserver
时,Django会在本机计算机上启动一个开发服务器并在本地主机的端口上监听HTTP请求。 - Piyush S. Wanarepython manage.py runserver
是 Django 内置的内部服务器。它不是 Apache、Nginx、Gunicorn 或其他任何服务器。django-extensions
提供了一个 runserver_plus
,它使用 Werkzeug 框架,但这是最接近服务器的 runserver
。 - Mike DeSimone通常最好将Python与主要的Web服务器分开运行,以便Web服务器可以拥有许多小线程,快速提供静态内容,而单独的Python进程将是庞大而沉重的,并且每个进程都会运行自己的Python解释器。因此,纯WSGI
不太好,因为它会使每个nginx线程膨胀,带上一个庞大的Python解释器。使用flup
、gunicorn
或uWSGI
在nginx
后面运行要好得多,因为这样可以释放nginx来简单地提供内容,并让你选择运行多少个小型轻量级nginx线程,而不受你选择启动多少个沉重的Python线程来提供动态内容的影响。目前人们似乎对gunicorn
非常满意,但这三个选项中的任何一个都应该可以正常工作。
此外,当负载开始变得严重时,这也可以使你将Python移动到另一台服务器上。
我相信这里 http://flask.pocoo.org/docs/deploying/uwsgi/ 是解决混淆的好答案。这个问题并不傻,任何没有关于mod_PHP世界之外如何工作的先前信息的人都会遇到这个问题(例如,不反对PHP或开发人员)。
该网站很好地解释了实际需要做什么以及差异以及nginx的良好部署示例。
为方便起见,从Flask wiki中引用了以下解释:
uWSGI是像nginx、lighttpd和cherokee这样的服务器上的部署选项;请参阅FastCGI 和 Standalone WSGI Containers 了解其他选项。要使用uWSGI协议运行WSGI应用程序,您首先需要一个uWSGI服务器。uWSGI既是协议,也是应用程序服务器;应用程序服务器可以服务于uWSGI、FastCGI和HTTP协议。
最流行的uWSGI服务器是uwsgi,在本指南中我们将使用它。确保已安装它以跟随操作。