对于Flask、uwsgi、wsgi和nginx的一些理解记录

对于Flask、uwsgi、wsgi和nginx的一些理解记录

Flask

Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。
对于Flask、uwsgi、wsgi和nginx的一些理解记录_第1张图片

uwsgi、wsgi和nginx的区别和关系

对于Flask、uwsgi、wsgi和nginx的一些理解记录_第2张图片

WSGI

Web Server Gateway Interface(Web服务器网关接口,WSGI)已被用作Python Web应用程序开发的标准。 WSGI是Web服务器和Web应用程序之间通用接口的规范。

web服务器和web框架

在讲uWSGI和WSGI之前,web应用服务器和web框架。Web应用服务器即用来接受客户端请求,建立连接,转发响应的程序。至于转发的内容是什么,交由web框架来处理,即处理这些业务逻辑。如查询数据库、生成实时信息等。Nginx就是一个web服务器,uwsgi是一个应用服务器,Django或flask就是web应用框架。

uwsgi和WSGI。

那么如何实现uWSGI和WSGI的配合呢?如何做到任意一个web应用服务器,都能搭配任意一个框架呢?这就产生了WSGI协议。只要web应用服务器和web框架满足WSGI协议,它们就能相互搭配。所以WSGI只是一个协议,一个约定。而不是python的模块、框架等具体的功能。而uWSGI,则是实现了WSGI协议的一个web服务器。即用来接受客户端请求,转发响应的程序。实际上,一个uWSGI的web服务器,再加上Django这样的web框架,就已经可以实现网站的功能了。那为什么还需要Nginx呢?

为什么需要Nginx

一个普通的个人网站,访问量不大的话,当然可以由uWSGI和Django或flask构成。但是一旦访问量过大,客户端请求连接就要进行长时间的等待。这个时候就出来了分布式服务器,我们可以多来几台web服务器,都能处理请求。但是谁来分配客户端的请求连接和web服务器呢?Nginx就是这样一个管家的存在,由它来分配。这也就是由Nginx实现反向代理,即代理服务器。
对于Flask、uwsgi、wsgi和nginx的一些理解记录_第3张图片

什么是nginx?

nginx其实也是一个web服务器,它是一个代理服务器,客户端的请求必须经过nginx,然后nginx再将请求中的动态请求转发给上游的web服务器

nginx有几个优点:

a.负载均衡:根据请求情况和服务器负载情况,将请求分配给不同的web服务器,保证服务器性能。负载均衡的机制有3种,
(1) 循环 - 对应用程序服务器的请求以循环方式分发,
(2) 最少连接 - 下一个请求被分配给活动连接数最少的服务器,
(3) ip-hash - 哈希函数用于确定应为下一个请求选择哪个服务器(基于客户端的IP地址)。

b.反向代理:客户端的请求由代理服务器分配给某web服务器,而不是客户端指定的目标服务器。对于一些静态文件,可以直接由反向代理处理,不经过web服务器。

c.安全性:客户端无法得知真正的服务器IP地址,保证了服务器的安全。

PS:正向代理和反向代理

正向代理:例如:VPN 就是做正向代理的。正向代理服务器位于客户端和服务器之间,为了向服务器获取数据,客户端要向代理服务器发送一个请求,并指定目标服务器,代理服务器将目标服务器返回的数据转交给客户端。这时,客户端和代理服务器可以看做一个客户端整体向目标服务器发送请求,所以客户端需要设置一些正向代理的配置。此时,目标服务器并不知道是谁真正想要请求这些数据的。

反向代理:其实客户端对代理是无感知的,因为客户端不需要任何配置就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器整体,暴露的是代理服务器地址,隐藏了真实服务器IP地址。客户端并不知道真正的服务器是谁。

本文是参考了多篇文章的总结,记录下了自己理解的部分。因为是做项目练习是都记在word里了,现在搬到博客,所以源头没有记录下来。 十分抱歉!

你可能感兴趣的:(python学习,nginx,web,python)