Web服务器,WSGI,Web框架之间的关系
2019-03-19 本文已影响0人
盛夏凉风
转做后端一段时间,之前没搞明白这几样东西的关系,查阅相关文档资料之后,作出以下总结。
客户端发送请求到服务器返回数据的流程Web服务器
我这里用了Nginx,首先介绍一下Nginx可作为HTTP、邮件、TCP/UDP的代理服务器,Nginx可以作为正向,反向代理。而在这里,Nginx作用为区分静态资源和动态请求,反向代理将请求转发给WSGI服务器。什么是正反向代理,如下图
左边是正向代理,右边为反向代理左图是正向代理,例子是我们搭建的VPN,里面VPS作为代理解密并转发了客户端的加密数据。右图是反向代理,假设访问www.xxx.com/资源1的时候,中间代理层去把资源1取回来返回给客户端,这是在客户端不需作额外工作且不知情的情况下完成的。我们Nginx作为Web代理服务器时就是使用了右边的流程,在我的项目里Nginx将请求转发给WSGI服务器,在将取得的数据返回给客户端。
只是自己搭一个小后台项目的话,Nginx并不是必需的,只要你API符合WSGI协议就可以访问,这里用Nginx的意义在于可以快速访问静态资源、内部由多部服务器组成集群,外部用一个地址访问,Nginx实现负载均衡等功能。
WSGI
首先搞明白几个名词
WSGI的全称是Web Server Gateway Interface(Web服务器网关接口),是一套协议规范。
uWSGI则是一个WSGI容器,它实现了WSGI、uwsgi、http等协议。WSGI容器可以有多种选择,uWSGI、Gunicorn、Tornado等等。
uwsgi则是上述uWSGI容器的独占协议。
这里我使用Gunicorn,用于处理转发Nginx发过来的请求给Web框架或者将Web框架返回数据转发给Nginx。
通信过程如图Web框架
python常用的Web框架有Flask、Django、web2py等等,这里就不解释了。