nginx uwsgi wsgi于Django的关系

1、首先Nginx是对外的服务接口,外部浏览器通过url访问Nginx,

2、Nginx 接收到浏览器发送过来的http请求,将包进行解析,分析url,如果是静态文件请求就直接访问用户给Nginx配置的静态文件目录,直接返回用户请求的静态文件。

        如果不是静态文件,而是一个动态的请求,那么Nginx就将请求转发给uwsgi,uwsgi接收到请求之后将包进行处理,处理成wsgi规范的格式,并通过wsgi,根据请求调用应用程序的某个文件,某个文件的某个函数,最后处理完将返回值再次通过wsgi打包成规范的格式。uwsgi收到通过wsgi发送过来的请求,并转发给Nginx,Nginx最终将返回值返回给浏览器。

3、要知道第一级的Nginx并不是必须的,uwsgi完全可以完成整个和浏览器交互的流程,但是要考虑到某些情况:

① 安全问题,程序不能直接被浏览器访问到,而是通过Nginx,Nginx只开放某个接口,uwsgi本身是内网接口,这样运维人员在Nginx上加上安全性的限制,可以达到保护程序的作用。

② 负载均衡问题,一个uwsgi很可能不够用,即使开了多个work也不行,毕竟一台机器的cpu和内存都是有限的,有了Nginx做代理,一个Nginx可以代理堕胎uwsgi完成uwsgi的负载均衡。

③ 静态文件问题,用Django或是uwsgi这种东西来负责静态文件的处理是很浪费的行为,而且他们本身对文件的处理也不如Nginx好,所有整个静态文件的处理都直接由Nginx完成,静态文件的访问完全不去经过uwsgi以及其后门的东西。

你可能感兴趣的:(nginx uwsgi wsgi于Django的关系)