1.什么是 ‘Web服务器’ 和‘Web框架’?
在python web开发中,我们经常使用uwsgi配合nginx,来部署一个web框架,例如Django或flask。同时我们又会说,框架和web服务器之间要符合WSGI协议,才能相互配合工作。以下先理清几个概念:
web服务器用来接收客户端请求,建立连接,转发响应的程序。至于转发什么样的响应,则交由web框架来处理,即处理具体的业务逻辑,如查询数据库,生成实时信息等。Nginx就是一个web服务器,Django 或 flask 就是一个web框架。
2.什么是 “WSGI”,“uWSGI”,“uwsgi”?
WSGI:(协议)
如何做到任意一个web服务器们都能搭配任意一个框架呢?这就产生了WSGI协议,只要web服务器和web框架满足WSGI协议,他们之间就能互相搭配。因此WSGI是一个协议,一个约定。
uWSGI:(web服务器)
uWSGI是一个Web服务器,它实现了WSGI、uwsgi、http等协议。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。
uwsgi:(协议)
与WSGI
一样是一种通信协议,是uWSGI
服务器的独占协议,用于定义传输信息的类型(type of information
),每一个uwsgi packet
前4byte
为传输信息类型的描述,与WSGI协议是两种东西,据说该协议是fcgi
协议的10倍快。
3. 为什么需要Nginx服务器?
好了,有了以上的概念。那实际上,一个uWSGI的web服务器,加上Django这样的web框架,旧已经可以实现网站的功能了。那还为什么需要Nginx服务器呢?
一个普通的网站,访问良不大的时候,当然可以由uWSGI和Django构成。但是一旦访问量过大,客户端请求连接就要进行长时间的等待。这个时候就出来了分布式服务器,我们可以多来几台web服务器,都能处理请求。但是谁来分配客户端的请求连接和web服务器呢?Nginx就是这样一个管家的存在,由它来分配。这也就是由Nginx实现反向代理,即代理服务器。
Nginx拥有如下特点:
1.作为 web 服务器,它处理静态文件和索引文件效果非常高;
2.它的设计非常注重效率,最大支持 5 万个并发连接,但只占用很少的内存空间;
3.稳定性高,配置简洁;
4.强大的反向代理和负载均衡功能,平衡集群中各个服务器的负载压力应用。
4.什么是“代理服务器”和“反向代理服务器”?
说到这里,再来顺便说一下什么是代理服务器和反向代理服务器
代理服务器:(Proxy Server)
是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。一些网关、路由器等网络设备具备网络代理功能。一般认为代理服务有利于保障网络终端的隐私或安全,防止攻击。
这个就是正向的代理服务器,它是代理网络用户去访问获得网络信息,主要起到的安全作用,因为有隐藏真实ip,突破访问限制的功能。其中最常见的就是VPN了。
反向代理服务器:(Reverse Proxy)
反向代理,顾名思义就是将代理服务器做出逆转,它主要的功能是代理服务器接收客户端发来的Http请求,转发到内部网络服务器,并返回Response给客户端。
反向代理的作用:
- 保证内网安全,可以使用反向代理服务器提供的WAF功能,阻止web攻击。
- 负载均衡,通过反向代理服务器来优化网站的负载
-
缓存静态资源,加快访问速度
更直白的说:正向代理服务器代理的是客户端,反向代理服务器代理的是服务器 (可能是多台)
5.Nginx和uWSGI服务器之间是如何配合工作的?
1.首先浏览器发起http请求到Nginx服务器
2.Nginx根据接收到请求包,进行url分析,判断访问的资源类型:如果是静态资源,直接读取静态资源返回给浏览器;如果请求的是动态资源就转交给uWSGI服务器。
3.uWSGI服务器根据自身的uwsgi 和 WSGI协议,找到对应的Django框架
4.Django框架下的应用进行逻辑处理后,将返回值发送到uWSGI服务器
5.然后uWSGI服务器再返回给Nginx服务器
6.最后Nginx将返回值返回给浏览器进行渲染显示给用户
参考来源: