uWSGI有什么意义?

问题描述 投票:53回答:3

我正在看WSGI specification,我正在试图弄清楚像uWSGI这样的服务器是如何融入图片的。我理解WSGI规范的重点是将像nginx这样的Web服务器与Web应用程序分开,就像你用Flask编写的东西一样。我不明白的是uWSGI的用途。为什么nginx不能直接调用我的Flask应用程序?烧瓶不能直接说WSGI吗?为什么uWSGI需要介入它们之间?

WSGI规范有两个方面:服务器和Web应用程序。 uWSGI在哪一边?

python nginx flask wsgi uwsgi
3个回答
90
投票

好的,我想我现在就明白了。

为什么nginx不能直接调用我的Flask应用程序?

因为nginx不支持WSGI规范。技术上,nginx可以实现WSGI规范,如果他们想要,他们只是没有。

在这种情况下,我们需要一个实现规范的Web服务器,这是uWSGI服务器的用途。

请注意,uWSGI是一个完整的http服务器,可以并且确实可以自行运行。我已经多次使用它了,效果很好。如果您需要超高吞吐量的静态内容,那么您可以选择在nginx服务器前面插入uWSGI。当你这样做时,他们将通过一个名为uwsgi的低级协议进行通信。

“什么是什么?!另一种叫做uwsgi的东西?!”你问。是的,这令人困惑。当你引用uWSGI时,你谈论的是一个http服务器。当你谈论uwsgi(全部小写)时,你谈论的是binary protocol服务器用来与uWSGI等其他服务器交谈的nginx。他们在这一个上选了一个坏名字。

对于任何有兴趣的人,我写了一篇关于它的blog article更具体的细节,一些历史和一些例子。


16
投票

传统的Web服务器无法理解或无法运行Python应用程序。这就是WSGI服务器进入的原因。另一方面,Nginx支持反向代理来处理请求并传回Python WSGI服务器的响应。

这个链接可能对您有所帮助:https://www.fullstackpython.com/wsgi-servers.html


12
投票

在这种情况下,NGINX仅作为反向代理,它接收请求并将它们代理到应用服务器,即UWSGI。

UWSGI服务器负责使用WSGI接口加载Flask应用程序。实际上,你可以让UWSGI直接听取来自互联网的请求并删除NGINX,尽管它主要用于反向代理。

来自docs

uWSGI支持几种与Web服务器集成的方法。它还能够自己提供HTTP请求。

WSGI只是一个接口规范,简单来说,它告诉您应该实现哪些方法来传递服务器和应用程序之间的请求和响应。当使用Flask或Django等框架时,这由框架本身处理。

换句话说,WSGI基本上是python应用程序(Flask,Django等)和Web服务器(UWSGI,Gunicorn等)之间的契约。好处是您可以轻松更改Web服务器,因为您知道它们符合WSGI规范,这实际上是目标之一,如PEP-333中所述。

Python目前拥有各种各样的Web应用程序框架,例如Zope,Quixote,Webware,SkunkWeb,PSO和Twisted Web - 仅举几例[1]。对于新的Python用户来说,这种多样的选择可能是一个问题,因为一般来说,他们选择的Web框架将限制他们对可用Web服务器的选择,反之亦然。

© www.soinside.com 2019 - 2024. All rights reserved.