Python学习之: Django uWSGI nginx 相关知识学习

wsmking 1年前 ⋅ 2144 阅读

知识学习

1、django
一个基于python的开源web框架,请确保自己熟悉它的框架目录结构。

2、uWSGI
一个基于自有的uwsgi协议、wsgi协议和http服务协议的web网关

3、nginx
常用高性能代理服务器

4、wsgi.py
django项目携带的一个wsgi接口文件
如果项目名叫mysite的话,此文件就位于[/mysite/mysite/wsgi.py]

运行流程 

1、首先客户端请求服务资源;
2、Nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析;
3、如果是静态文件请求就根据Nginx配置的静态文件目录,返回请求的资源;
4、如果是动态的请求,Nginx就通过配置文件,将请求传递给uWSGI;uWSGI 将接收到的包进行处理,并转发给WSGI;
5、WSGI根据请求调用Django工程的某个文件或函数,处理完后Django将返回值交给WSGI;
6、WSGI将返回值进行打包,转发给uWSGI,
7、uWSGI接收后转发给Nginx,Nginx最终将返回值返回给客户端(如浏览器)。
注:不同的组件之间传递信息涉及到数据格式和协议的转换

说明:

1、第一级的Nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程;
2、在Nginx上加上安全性或其他的限制,可以达到保护程序的作用;
3、uWSGI本身是内网接口,开启多个work和processes可能也不够用,而Nginx可以代理多台uWSGI完成uWSGI的负载均衡;
4、django在debug=False下对静态文件的处理能力不是很好,而用nginx来处理更加高效。

为方便理解,uWSGI,WSGI和uwsgi在网站项目流程图中的功能如下:(图片来自博客:https://www.cnblogs.com/new-rain/p/10089941.html

uWSGI,WSGI和uwsgi的区别

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

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

WSGI 是作为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口,以提升可移植 Web 应用开发的共同点。WSGI 是基于现存的 CGI 标准而设计的。

WSGI是 Web 服务器(uWSGI)与 Web 应用程序或应用框架(Django)之间的一种低级别的接口

(2)uwsgi:是服务器和服务端应用程序的一种协议,规定了怎么把请求转发给应用程序和返回;uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。

(3)uWSGI:是一种 Python Web Server 或称为 Server/Gateway,uWSGI 是实现了 uwsgi 和 WSGI 两种协议的Web服务器,负责响应 Python 的 Web 请求。 

因为Apache、Nginx等,它们自己都没有解析动态语言如 php 的功能,而是分派给其他模块来做,比如 Apache 就可以说内置了php模块,让人感觉好像Apache就支持 php 一样。 

uWSGI实现了wsgi协议、uwsgi协议、http等协议。 Nginx中 HttpUwsgiModule 的作用是与 uWSGI 服务器进行交换。


全部评论: 0

    我有话说: