简单说一下从用户发送请求到用户获得响应结果的大致流程
浏览器发送http请求先到nginx,nginx接收到浏览器发送过来的http请求并进行解析,分析url,如果是静态文件请求就直接返回nginx配置的静态文件目录,直接返回用户请求的静态文件。
如果不是静态文件的请求而是一个动态请求,那么nginx就将请求转发给uwsgi,uwsgi接收到请求之后并进行解析处理,处理成wsgi可以接收的格式,并发给wsgi,wsgi根据请求调用相应的API,也就是我们用框架(django,flask)写的接口,调用完之后把处理的返回值再交给wsgi,wsgi将返回值进行打包,打包成uwsgi能接收的格式,uwsgi接收wsgi发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。

web服务器和web框架概念
web服务器是用来接收客户端请求,建立连接,转发响应的程序。至于转发的内容是什么,交由web框架来处理,也就是处理这些业务逻辑。比如查询数据库。Nginx就是一个web服务器,django,flask就是web框架

uWSGI和WSGI的区别
如何实现uWSGI和WSGI的配合?如何做到任意一个web服务器能搭配任意一个框架?基于此就产生了WSGI协议。只要web服务器和web框架满足WSGI协议,他们就能互相搭配。所有WSGI只是一个协议,一个约定,一个规范。并不是python的模块或框架功能等。
而uWSGI则是实现了WSGI协议的一个web服务器。即用来接收客户端请求,转发响应的程序。实际上,一个uWSGI的服务器再加上Django这样的框架就能实现项目部署的功能了。

既然不使用nginx就可以实现项目的部署从而实现网站的功能为什么还要用nginx服务器?
(1)安全问题:程序不能直接被浏览器访问到,而是通过nginx,nginx只开放某个接口,这样运维人员在nginx上可以加上安全限制,从而达到保护程序的目的并且客户端无法得知真正的服务器IP地址,保证了服务器的安全
(2)负载均衡问题,一个uwsgi很可能不够用,即使开了多个work也是不行,毕竟一台机器的cpu和内存都是有限的,有了nginx做代理,一个nginx可以代理多台uwsgi完成uwsgi的负载均衡。
(3) 静态文件问题,用django或是uwsgi这种东西来负责静态文件的处理是很浪费的行为,而且他们本身对文件的处理也不如nginx好,所以整个静态文件的处理都直接由nginx完成,静态文件的访问完全不去经过uwsgi以及其后面的东西。

Nginx是静态web服务器和反向代理
正向代理:请求经过代理服务器从局域网发出,然后到达互联网上的服务器。
特点:服务端并不知道真正的客户端是谁。
反向代理:请求从互联网发出,先进入代理服务器,再转发给局域网内的服务器。
特点:客户端并不知道真正的服务端是谁。
区别:正向代理的对象是客户端。反向代理的对象是服务端。