web 框架的部署 ---- Nginx + uwsgi
WSGI: 是一种Web服务器网关接口,它是一个Web服务器(如Nginx) 与应用服务器(如uWSGI服务器)通信的一种规范。
uWSGI:是一个Web服务器,它实现了WSGI协议,uwsgi,http等协议,Nginx中HttpUwsgiModul的作用是与uWSGI服务器进行交换。
简单的来讲WSGI就是,标准,
比如: 一个德国人跟一个法国人聊天,他们要想聊天可以通过一个标准的国际语言: 英语来进行交互。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
WSGI 是一种通信协议,是连接服务器与python web应用程序交互的接口。
uwsgi 是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
uWSGI 是实现了uwsgi和WSGI两种协议的Web服务器。
Nginx + uWSGI 项目部署的工作流程:
1.首先客户端请求服务资源,
2.nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析,
3.如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源,
4.如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;uWSGI 将接收到的包进行处理,并转发给wsgi,
5.wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi,
6.wsgi将返回值进行打包,转发给uWSGI,
7.uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。
*注:不同的组件之间传递信息涉及到数据格式和协议的转换
**作用:**
- 第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程;
- 在nginx上加上安全性或其他的限制,可以达到保护程序的作用;
- uWSGI本身是内网接口,开启多个work和processes可能也不够用,而nginx可以代理多台uWSGI完成uWSGI的负载均衡;
- django在debug=False下对静态文件的处理能力不是很好,而用nginx来处理更加高效。