共计 936 个字符,预计需要花费 3 分钟才能阅读完成。
在做python web开发,经常会使用uWSGI配合NGINX来部署一个web框架,在学习web开发时,又会说web服务器和web框架之间都是符合WSGI协议的,那么它们之间到底有什么联系?
要搞清楚这个问题之前,先要弄懂它们的概念
区分 WSGI / uwsgi / uWSGI
- WSGI是一种通信协议
- uwsgi 是一种线路协议,而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
- uWSGI 是实现了uwsgi 、WSGI 和 http 等协议的Web服务器
- uwsgi 是uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information)
Web 服务器和 Web 框架
Web 服务器就是用来接收客户端请求,建立连接,转发响应的程序。转发的内容是什么呢?这个要交由Web框架来处理,
即处理一些业务逻辑,如增删改查,然后生成响应。
Nginx 是一个Web服务器,Django 或 flask 就是一个web框架
再来看 uWSGI 和 WSGI
如何做到任意一个web服务器,都能搭配任意一个web框架?这个时候就产生了WSGI协议,只要web服务器和web框架都按WSGI协议来注册,它们之间就能相互搭配。所以WSGI只是一个协议,一个约定。而不是python的模块、框架等具体的功能。
而uWSGI 就是一个实现了WSGI协议的web服务器,Django或flask就是一个按WSGI协议注册的框架,所以uWSGI+Flask这样组合就能实现一个网站的基本功能了。
WSGI协议
WSGI协议是一种规定,规定了服务器和框架之间如何传输数据。
- application() 是 WSGI 协议的具体体现
- environ 是服务器传过来的数据,使用字典
- start_response 的作用是框架给服务器传响应头
- return 是框架返回响应体
为什么要使用 Nginx?
网站访问量不大的话,当然可以由一个 uWSGI 和 Django 构成。但是一旦访问量过大,客户端请求连接就要进行长时间的等待。这个时候就出来了分布式服务器,我们可以多部署几台web服务器,来应对高并发的处理请求。但是谁来分配客户端的请求连接和web服务器呢?Nginx就是这样一个管家的存在,由它来分配。这也就是由Nginx实现反向代理,即代理服务器。