Django+uWSGI+Nginx原理详解

作者: Maql | 来源:发表于2017-08-16 22:08 被阅读858次

    首先明确整体架构

    整体架构
    1. Nginx 作为反向代理服务器:
      • 负责静态资源处理、动态请求转发以及结果的回复;
    2. uWSGI 作为Web服务器:
      • 负责接收 Nginx 请求转发并处理后发给 Django 以及
        接收 Django 返回信息转发给 Nginx;
    3. Django 作为应用框架:
      • 收到请求后处理数据并响应结果给 uWSGI 服务器。

    彼此的通讯关系

    uwsgi和WSGI协议
    1. uwsgi和WSGI协议作为三者之间的桥梁。

    理解概念

    1. WSGI:
      它是用在 python web 框架编写的应用程序与后端服务器之间的规范。(本例就是 Django 和 uWSGI 之间)它使得Web App可以与Web Server顺利通信。所有使用 WSGI 的服务器都可以运行使用 WSGI 规范的web 框架。它规定WSGI application应该实现为一个可调用对象。
    2. uWSGI:
      uWSGI: 是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。
      用于接收前端服务器转发的动态请求并处理后发给 web 应用程序。
    3. uwsgi:
      uwsgi是uWSGI服务器实现的独有的协议。
    4. wsgi.py
      生成Django项目时默认生成的python文件,用于web server与Django进行通信。
    5. wsgiref
      Python的一个模块,Django内部的web server就是基于这个模块建立的。

    原理说明

    1. 无论是Django自带的Web Server还是uWSGI,在启动时都会去加载你的Django项目下的wsgi.py文件,这个文件内部返回了一个application实例。
    2. application实例其实也是一个可调用对象,因为这个类中实现了call使得它能被像函数一样调用
    3. 在uWSGI中,读取完application后,会起一个主进程去监听用户的请求,根据你的配置的进程数会产生相同数量的子进程,例如你配置2个进程,则产生2个子进程。一旦有请求过来,则会让子进程去执行请求。
    4. 假如有3个请求同时过来,而你只配置了2个进程去处理请求,那么第三个请求将会阻塞。例如一个请求需要执行10s,则第三个请求需要执行20s.

    转载请说明,谢谢~

    相关文章

      网友评论

        本文标题:Django+uWSGI+Nginx原理详解

        本文链接:https://www.haomeiwen.com/subject/zmewrxtx.html