• 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)代理与反向代理

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

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

    (2)代理服务器的作用 

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

      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最终将返回值返回给客户端(如浏览器)

     

  • 相关阅读:
    教务管理系统(node+express+mysql)
    poj 2485 Highways 超级大水题 kruscal
    HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,floyd水
    HEX格式转BIN格式 MOT格式转BIN格式
    html的标签一共有多少个?
    同时存在n个线程(n>5),需要写入或者读取一个名为test.txt的文件
    poj 1258 AgriNet 水题三连发。。。又是kruscal
    招投标专家库
    poj 1789 kruscal水题
    仿Word自动套用格式,用CSS设置表格样式
  • 原文地址:https://www.cnblogs.com/Cucucudeblog/p/13614866.html
Copyright © 2020-2023  润新知