我正在研究WSGI规范,并试图弄清楚像uWSGI这样的服务器是如何适应图片的。我了解WSGI规范的重点是将Web服务器(如nginx)与Web应用程序(如您使用Flask编写的东西)分开。我不明白uWSGI是做什么的。为什么Nginx无法直接调用我的Flask应用程序?Flask不能直接对它说WSGI吗?uWSGI为什么需要介入它们之间?
WSGI规范有两个方面:服务器和Web应用程序。uWSGI在哪一边?
Answers:
好吧,我想我现在明白了。
为什么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直接侦听来自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服务器的选择,反之亦然。
传统的Web服务器无法理解或无法运行Python应用程序。这就是WSGI服务器出现的原因。另一方面,Nginx支持反向代理来处理请求并传递Python WSGI服务器的响应。
该链接可能会对您有所帮助:https : //www.fullstackpython.com/wsgi-servers.html