UWSGI 的意义是什么?

我正在查看 WSGI 规范,并试图弄清楚像 UWSGI这样的服务器是如何适应这种情况的。我理解 WSGI 规范的意义在于将像 nginx 这样的 Web 服务器与像使用 酒瓶编写的应用程序这样的 Web 应用程序分离开来。我不明白 uWSGI 是干什么的。为什么 nginx 不能直接调用我的 Flask 应用程序?烧瓶不能直接对它说 WSGI 吗?为什么 uWSGI 需要介入他们之间?

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

42780 次浏览

传统的 Web 服务器不理解 Python 应用程序,也没有任何运行 Python 应用程序的方法。这就是为什么 WSGI 服务器进来。另一方面,Nginx 支持反向代理来处理 Python WSGI 服务器的请求和传回响应。

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

好吧,我想我明白了。

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

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

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

请注意,uWSGI是一个成熟的 http 服务器,它可以并且确实能够很好地独立工作。我已经在这方面使用了好几次,效果非常好。如果您需要静态内容的超高吞吐量,那么您可以选择将 nginx粘贴到 uWSGI服务器前。当你这样做的时候,他们将通过一个称为 uwsgi的低级协议进行通信。

“搞什么? !另一个叫做 uwsgi 的东西? !”你问。是啊,很让人困惑。当您引用 uWSGI时,您所说的是一个 http 服务器。当您谈论 uwsgi(全部小写)时,您所谈论的是 uWSGI 服务器用来与其他服务器(如 nginx)通信的 二进制协议。他们给这个人起了个坏名字。

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

在这种情况下,NGINX 只作为反向代理并呈现 静态文件不是动态文件,它接收请求并将其代理到应用服务器,即 UWSGI。

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

来自 医生:

UWSGI 支持多种与 Web 服务器集成的方法,它还能够自己服务 HTTP 请求。

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

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

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

简单来说,只要想象一下使用 Nginx Web 服务器运行 CGI 或 PHP 应用程序的情况。您将使用相应的处理程序(如 php-fpm)来运行这些文件,因为 webserver 的本机格式不会呈现这些格式。

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