nginx+WSGI+uwisgi+uWISI详解及nginx/uwisgi/django交互流程

目录

  1. nginx
    1. 代理与反向代理
    2. 代理服务器的作用
    3. 反向代理服务器的作用 
    4. nginx的作用
    5. nginx的工作过程  
  2. WSGI
    1. WSGI是什么
    2. WSGI的作用  
  3. uwsgi
  4. uWSGI
  5. nginx/uwisgi/django交互流程

1. nginx

(1)代理与反向代理

  (正向)代理服务器是位于客户端和原始服务器的一台中间服务器。为了从原始服务器获取到内容,客户端向代理服务器发送一个请求并带上目标服务器,代理服务器接收到请求后会将请求转发给原始服务器,并将从原始服务器上获得到的数据返回给客户端。代理服务器是代理的客户端,一般客户端是知道代理服务器的存在的,比如FQ就用了代理服务器

  反向代理服务器是位于原始服务器端的服务器,反向代理服务器接收来自互联网的请求,然后将这些请求发送给内网的服务器,并将从内网的服务器获取结果返回给互联网上的客户端,反向代理服务器是代理的服务器端,所以客户端时不知道反向代理服务器的存在的,服务器是知道反向代理服务器的。nginx就是常用的反向代理服务器。

(2)代理服务器的作用 

  1. 访问原本无法访问的资源(如FQ)

  2. 用作缓存,加速访问速度

  3. 对客户端访问授权,上网进行认证(校园网认证)

(3) 反向代理服务器的作用

  1. 保护内网安全

  2. 负载均衡

  3. 缓存、减少服务器的压力

(4)nginx的作用

  1. nginx是一个反向代理服务器,将多台服务器代理成一台服务器,用户访问网站的时候,首先HTTP请求会访问到在nginx服务器,nginx服务器会转到我们实际的后台项目中去,其起一个中转的作用。

  2. nginx用于实现高并发。可以实现负载均衡,将多个请求均匀的分配到多台服务器上,减轻每台服务器的压力,提高服务的吞吐量。比如若在某一刻有几万个人同时访问后台服务器,后台服务器会直接崩掉,利用nginx可以实现负载均衡,将多个请求均匀的分配到多台服务器上,减轻每台服务器的压力,提高服务的吞吐量。

  3. 动静分离,nginx可以用作静态文件的缓存服务器,提高访问速度,

(5)nginx的工作过程

      

 

 

 

 

    1. 在nginx启动后,会有一个master进程和多个worker进程,master进程主要用来管理worker进程,包括:接受信号,将信号分发给worker进程,监听worker进程工作状态,当worker进程退出时(非正常),启动新的worker进程。基本的网络事件会交给worker进程处理。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其他进程的请求,worker进程的个数时可以设置的,一般我们设置与机器CPU核数一致。

    2. 当master接收到重新加载的信号会怎么处理?master会重新加载配置文件,启动新的进程,使用新的worker进程来接受请求,并告诉老的worker进程他们可以退休了,老的worker进程将不会接受新的,老的worker进程处理完手中正在处理的请求就会退出

    3. worker进程是如何处理用户的请求呢?首先master会根据配置文件生成一个监听相应端口的socket,然后再faster出多个worker进程,这样每个worker就可以接受从socket过来的消息(其实这个时候应该是每一个worker都有一个socket,只是这些socket监听的地址是一样的)。当一个连接过来的时候,每一个worker都能接收到通知,但是只有一个worker能和这个连接建立关系,其他的worker都会连接失败,这就是所谓的惊群现在,为了解决这个问题,nginx提供一个共享锁accept_mutex,有了这个共享锁后,就会只有一个worker去接收这个连接。当一个worker进程在accept这个连接之后,就开始读取请求,解析请求,处理请求,产生数据后,再返回给客户端,最后才断开连接,这样一个完整的请求就是这样的了。

2. WSGI

(1)WSGI是什么

  WSGI是一种通信协议。WSGI,全称Web Server Gateway Interface,或者Python Web Server Gateway Interface,是为python语言定义的web服务器和web应用程序或框架之间的一种简单而通用的接口。也就是说,WSGI就像是一座桥梁,一边连着web服务器,另一边连着用户的应用。  

  

(2)WSGI的作用

  WSGI有两方:“服务器”或“网关”一方,以及“应用程序”或“应用框架”一方。服务方调用应用方,提供环境信息,以及一个回调函数,并接收web内容作为返回值。

3. uwsgi

  uwsgi同WSGI一样是一种通信协议

4. uWSGI

 

  uWSGI是一个web服务器,它实现了WSGI协议、uwsgi、HTTP等协议,nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

 

  要注意WSGI/uwisgi/uWSGI等概念的区分

 

  ·WSGI是一种通信协议

 

  ·uwsgi同WSGI一样是一种通信协议

 

  ·uWSGI是实现了uwsgi和WSGI两种协议的web服务器

5. nginx/uwsgi/django交互流程

 

  ·首先是客户端请求服务资源

 

  ·nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包,分析。

 

  ·如果是静态文件就根据nginx配置的静态文件目录,返回请求的资源

 

  ·如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;uWSGI将接收到的包进行处理,并转发给wsgi,

 

  ·wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi.

 

  ·wsgi将返回值进行打包,转发给uWSGI

 

  ·uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)

 

 

posted @ 2020-09-04 17:09  Cucucu  阅读(399)  评论(0编辑  收藏  举报