网络基本知识python遨游记

Django+uWSGI+Nginx原理详解

2017-08-16  本文已影响858人  Maql

首先明确整体架构

整体架构
  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.

转载请说明,谢谢~

上一篇 下一篇

猜你喜欢

热点阅读