为什么 flask + uWSGI + Nginx ?

概述

在Python开发的web应用中,我们通常能够看到flask、uWSGI、Nginx出现在一起,他们之间的关系是什么?为什么总是被应用在一起?

三者共同使用为了实现一个目的:客户端向服务端发送数据请求,服务端根据应用代码逻辑返回客户端需要的数据。

说明:
(1)既然客户端可以请求服务端的数据,那么客户端与服务端肯定是可以通信的,通信是由谁来完成的呢?就是web server:Nginx.
(2)服务端根据应用代码逻辑给出客户端需要的数据,那么你的web 服务器就需要能够理解应用代码并且能够运行应用代码拿到结果。那么这一功能是由谁来完成的呢?就是应用服务器:uWSGI.

你需要了解的是:

A traditional web server does not understand or have any way to run Python applications.
​
the late 1990s, a developer named Grisha Trubetskoy came up with an Apache module called mod_python to execute arbitrary Python code.
For several years in the late 1990s and early 2000s, Apache configured with mod_python ran most Python web applications.
​
However, mod_python wasn’t a standard specification(不是标准规范).
It was just an implementation that allowed Python code to run on a server. 
As mod_python’s development stalled and security vulnerabilities were discovered there was recognition by the community that a consistent way to execute Python code for web applications was needed.
​
Therefore the Python community came up with WSGI as a standard interface that modules and containers could implement. 
WSGI is now the accepted approach for running Python web applications.

他们三者分别是什么?

Flask:

Flask是目前十分流行的web框架,采用Python编程语言来实现相关功能。它被称为微框架(microframework),程序员可以使用Python语言快速实现一个网站或Web服务。

Nginx:

Nginx是一个web 服务器,即HTTP Server, 一个 HTTP Server 关心的是 HTTP 协议层面的传输和访问控制,所以在 Apache/Nginx 上你可以看到代理、负载均衡等功能。客户端通过 HTTP Server 访问服务器上存储的资源(HTML 文件、图片文件等等)。

uWSGI:

uWSGI:

uWSGI是应用服务器,是一个应用执行的容器。它首先需要支持开发语言的 Runtime(对于 Tomcat 来说,就是 Java),保证应用能够在应用服务器上正常运行。其次,需要支持应用相关的规范,例如类库、安全方面的特性。对于 Tomcat 来说,就是需要提供 JSP/Sevlet 运行需要的标准类库、Interface 等。为了方便,应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后(所以需要配合Nginx使用—所以 Nginx+uWSGI),执行应用,将动态的内容转化为静态的内容之后,通过 HTTP Server 分发到客户端。

WSGI:

WSGI 是一种 Web 服务器网关接口。WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器 和 Web 应用程序或框架之间的一种简单而通用的接口。自从 WSGI 被开发出来以后,许多其它语言中也出现了类似接口。

WSGI 的官方定义是,the Python Web Server Gateway Interface。从名字就可以看出来,这东西是一个Gateway,也就是网关。网关的作用就是在协议之间进行转换。

它是一 个 Web 服务器(如 nginx,uWSGI 等服务器)与 web 应用(如用 Flask 框架写的程序)通信的一种 规范。WSGI协议其实是定义了一种server与application解耦的规范,即可以有多个实现WSGI server的服务器,也可以有多个实现WSGI application的框架,那么就可以选择任意的server和application组合实现自己的web应用。例如uWSGI和Gunicorn都是实现了WSGI server协议的服务器,Django,Flask是实现了WSGI application协议的web框架,可以根据项目实际情况搭配使用。

综上:

flask是使用Python进行web开发的框架,而通过Python编写的代码如果想对外提供服务,需要有一个web server,也就是Nginx,实现与客户端的通信;但是理论上web server与应用程序之间是无法通信的,他们之间也需要有一个桥梁,这个桥梁就是uWSGI,uWSGI通过WSGI这个协议,将web server的请求转换成应用程序可以理解的request,与应用程序进行动态数据交互,将请求到的数据转换成web server可以理解的形式,由 web server将数据最终返回给请求的客户端。

是否可以不使用Nginx?

可以,uWSGI本身也可以作为web server使用,只是它本身的性能非常有限,为了方便,应用服务器往往也会集成 HTTP Server 的功能,但是不如专业的 HTTP Server 那么强大,所以应用服务器往往是运行在 HTTP Server 的背后为 web server 与 应用程序 提供 通信的桥梁。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Flask是一个基于Python的轻量级Web框架,它提供了简单易用的工具来构建Web应用程序。Flask具有灵活的设计,可以根据需求进行扩展和定制。它支持RESTful风格的API开发,并且具有良好的可扩展性,适用于开发小型到中型的Web应用。 uWSGI是一个Web服务器和应用服务器,它可以将Web应用程序从框架中分离出来,并通过WSGI协议与框架进行通信。它支持高并发和负载均衡,并且具有内置的缓存机制和性能监控。uWSGIFlask配合使用可以提高Web应用程序的性能和稳定性。 Nginx是一个高性能的开源HTTP服务器和反向代理服务器。它可以处理大量并发连接,并能有效地分发请求到后端服务器。Nginx的反向代理功能可以将请求转发给uWSGI服务器,然后由uWSGI服务器处理Flask应用程序的逻辑。 使用FlaskuWSGINginx的组合可以实现一个高性能的Web应用程序架构。首先,Flask用于开发Web应用程序的逻辑和路由。然后,uWSGI作为应用程序服务器,将Flask应用程序加载到内存中,并以WSGI协议与Nginx进行通信。最后,Nginx作为前端服务器,通过负载均衡和反向代理将请求分发到uWSGI服务器。 这种架构可以提供高并发、可扩展和稳定的Web应用程序。Flask提供了优雅的开发方式,uWSGI处理应用程序的逻辑和性能优化,而Nginx作为前端服务器提供高性能的负载均衡和反向代理。整个架构可以根据需求进行灵活的配置和扩展,以满足不同规模的Web应用程序的需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值