uWSGI的意义是什么?


97

我正在研究WSGI规范,并试图弄清楚像uWSGI这样的服务器是如何适应图片的。我了解WSGI规范的重点是将Web服务器(如nginx)与Web应用程序(如您使用Flask编写的东西)分开。我不明白uWSGI是做什么的。为什么Nginx无法直接调用我的Flask应用程序?Flask不能直接对它说WSGI吗?uWSGI为什么需要介入它们之间?

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

Answers:


131

好吧,我想我现在明白了。

为什么Nginx无法直接调用我的Flask应用程序?

因为nginx不支持WSGI规范。从技术上讲,nginx可以根据需要实施该WSGI规范,而实际上并没有。

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

请注意,这uWSGI是一个完整的http服务器,可以单独运行并且运行良好。我已经以这种身份多次使用它,并且效果很好。如果您需要超高的静态内容吞吐量,则可以选择停留nginxuWSGI服务器前。完成后,他们将通过称为的低级协议进行通信uwsgi

“什么事?!又叫uwsgi ?!” 你问。是的,令人困惑。当您引用时,uWSGI您正在谈论的是http服务器。当您谈论uwsgi(全部小写)时,您所谈论的是是该uWSGI 服务器用来与其他服务器进行通讯二进制协议nginx。他们在这个名字上取了一个坏名字。

对于任何有兴趣的人,我都写了一篇有关它的博客文章,其中包含更多细节,一些历史和一些示例。


4
可以将Werkzeug用作HTTP服务器来运行Flask应用程序,但这不是生产就绪的设置。uWSGI解决了多个问题:* HTTP解析(在C语言中更快)并与WSGI应用程序接口*在多个进程/线程中启动应用程序以提高并发性*担任WSGI应用程序的主管
Sergey Panfilov

@SergeyPanfilov的麻烦是我们不知道uwsgi如何处理flask,每个进程/线程创建了flask应用程序的一个实例?我已经在Flask-Executor之类的烧瓶中看到了一些后台任务的实现,它必须绑定到请求中。不能放在上下文之外。
TomSawyer

阅读从哈桑的答案..它是接近正确答案..... HTTP服务器大多是用C写的,他们不能前进的HTTP请求发送到后端蟒蛇....你的答案只是谈到了力学
overexchange

25

在这种情况下,NGINX仅用作反向代理和渲染 静态文件而不动态文件,它接收请求并将它们代理到应用服务器(即UWSGI)。

UWSGI服务器负责使用WSGI接口加载Flask应用程序。实际上,您可以使UWSGI直接侦听来自Internet的请求,并根据需要删除NGINX,尽管它通常在反向代理之后使用。

文档

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

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

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

蟒蛇目前拥有各种各样的Web应用程序框架,如Zope的,堂吉诃德,Webware的,SkunkWeb,PSO和扭曲网站-仅举几个1。对于新的Python用户而言,如此众多的选择可能是一个问题,因为通常来说,他们对Web框架的选择将限制他们对可用Web服务器的选择,反之亦然。


20

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

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


4
这里有三件事:nginx,uwsgi和flask。在WSGI规范的背景下,它们如何融合在一起?是nginx是服务器,uwsgi是应用程序还是uwsgi是服务器,flask是应用程序?
d512 '16

uWSGI是服务器,而flask是应用程序。
拉菲古尔·哈桑

好吧,如果您不介意,请查看我对自己问题的回答,看看您的想法。
d512

4
Web服务器为什么不理解Python应用程序?它可以理解PHP,为什么不理解Python或其他语言?
jdogg

0

简而言之,可以想像一下您在Nginx Web服务器上运行CGI或PHP应用程序的情况。您将使用像php-fpm这样的相应处理程序来运行这些文件,因为Web服务器以其本机格式不会呈现这些格式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.