WSGI与uWSGI结合Nginx的对比
3 个回答
我觉得这个链接 http://flask.pocoo.org/docs/deploying/uwsgi/ 是个很好的答案,可以帮助你搞清楚一些困惑。这个问题并不傻,很多人看到这两个术语时,如果之前没有了解过相关知识,都会感到迷茫,尤其是在 mod_PHP 的世界之外(这不是针对 PHP 或者使用 PHP 的人)。
这个网站很好地用实际的例子解释了需要什么,以及它们之间的区别,还提供了一个关于 nginx 的部署示例。
为了方便起见,这里引用了 Flask 维基上的解释:
uWSGI 是在像 nginx、lighttpd 和 cherokee 这样的服务器上部署应用的一种选择;你还可以查看 FastCGI 和独立的 WSGI 容器来了解其他选项。要使用 uWSGI 协议运行你的 WSGI 应用,你首先需要一个 uWSGI 服务器。uWSGI 既是一种协议,也是一种应用服务器;这个应用服务器可以支持 uWSGI、FastCGI 和 HTTP 协议。
最流行的 uWSGI 服务器是 uwsgi,我们在这个指南中会使用它。确保你已经安装了它,这样才能跟着操作。
一般来说,最好把Python放在一个和你主要的网页服务器分开的进程里。这样,网页服务器可以有很多小线程,快速处理静态内容,而你单独的Python进程则比较大、比较重,每个都在运行自己的Python解释器。使用普通的WSGI
就不好,因为它会让每一个nginx线程都变得很臃肿,装上一个大大的Python解释器。使用flup
、gunicorn
或uWSGI
在nginx
后面会好很多,因为这样可以让nginx专心提供内容,同时你可以独立选择要运行多少个小的轻量级nginx线程,而不必担心要多少个重的Python线程来处理动态内容。目前大家对gunicorn
的评价很高,但这三种选择都应该没问题。
往后看,这样做也能让你在负载变大的时候,把Python迁移到另一台服务器上。
大家好,这里有些混淆是因为很多来源没有详细解释这些协议的名字,以及WSGI到底是什么。
总结:
- WSGI和uwsgi都是协议,而不是服务器。它们用于与网络服务器进行沟通,帮助负载均衡,特别是为了利用纯HTTP无法提供的额外功能。目前,Nginx和Cherokee已经实现了这个协议。
- uWSGI是一个服务器,它实现的协议之一就是WSGI(不要把uwsgi协议和uWSGI服务器搞混)。WSGI是一个Python的规范。有很多不同的实现方式,WSGI不仅仅用于应用服务器或网络服务器,还有很多WSGI应用服务器(比如CherryPy,它也有一个可以投入生产使用的WSGI兼容网络服务器,如果你还没搞清楚的话!)。
- 把uwsgi和WSGI进行比较,就像把橘子和苹果放在一起比较一样。