uWSGI有什么意义?

时间:2016-07-26 23:27:08

标签: python nginx flask wsgi uwsgi

我正在查看WSGI specification,而我正试图弄清楚像uWSGI这样的服务器是如何适应这种情况的。我理解WSGI规范的重点是将像nginx这样的Web服务器与Web应用程序(例如您使用Flask编写的内容)分开。我不明白的是uWSGI的用途。为什么nginx可以直接调用我的Flask应用程序?无法直接向WSGI讲话吗?为什么uWSGI需要介入它们之间?

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

5 个答案:

答案 0 :(得分:72)

好的,我想我现在就知道了。

  

为什么nginx可以直接调用我的Flask应用程序?

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

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

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

"什么是什么?!还有一个叫做uwsgi的东西?!" 你问。是的,这令人困惑。当您引用uWSGI时,您正在谈论的是http服务器。当您谈到uwsgi(全部小写)时,您谈论的是uWSGI 服务器用于与nginx等其他服务器通信的binary protocol 。他们在这个名字上选了一个坏名字。

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

答案 1 :(得分:14)

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

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

答案 2 :(得分:7)

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

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

来自docs

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

WSGI只是一个接口规范,简单来说,它告诉您应该实现哪些方法来传递服务器和应用程序之间的requets和响应。使用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服务器的选择,反之亦然

答案 3 :(得分:2)

我们遗漏了一个重要方面。 Flask 和 Django 是 Web 框架,我们用它们构建 Web 应用程序。 uWSGI 或 Gunicorn 处理框架文件。将其视为位于 Django 应用程序和 Nginx 之间的软件应用程序。 uWSGI 和 Nginx 使用 WSGI 进行通信,但 Django 和 uWSGI 之间没有通信接口。观看此视频 https://www.youtube.com/watch?v=WqrCnVAkLIo

答案 4 :(得分:0)

简单地说,想一想在Nginx Web服务器上运行CGI或PHP应用程序的类比。您将使用像php-fpm这样的相应处理程序来运行这些文件,因为Web服务器以其本机形式不会呈现这些格式。