精华内容
下载资源
问答
  • Nginx+uWSGI+Django原理

    2019-09-27 09:48:52
    uWSGI原理 多进程 https://www.cnblogs.com/Xjng/p/aa4dd23918359c6414d54e4b972e9081.html https://www.jianshu.com/p/1c50b15b143a https://blog.csdn.net/sinat_41898105/article/details/80806394

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    uWSGI原理

    多进程

    https://www.cnblogs.com/Xjng/p/aa4dd23918359c6414d54e4b972e9081.html
    https://www.jianshu.com/p/1c50b15b143a
    https://blog.csdn.net/sinat_41898105/article/details/80806394

    展开全文
  • uWSGI 作为Web服务器: 负责接收 Nginx 请求转发并处理后发给 Django 以及接收 Django 返回信息转发给 Nginx; Django 作为应用框架: 收到请求后处理数据并响应结果给 uWSGI 服务器。 uwsgi和WSGI协议 ...

    Nginx 作为反向代理服务器:

      • 负责静态资源处理、动态请求转发以及结果的回复;

    uWSGI 作为Web服务器:

      • 负责接收 Nginx 请求转发并处理后发给 Django 以及接收 Django 返回信息转发给 Nginx;

    Django 作为应用框架:

      • 收到请求后处理数据并响应结果给 uWSGI 服务器。

    uwsgi和WSGI协议

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

     

    理解概念

    1. WSGI:

    它是用在 python web 框架编写的应用程序与后端服务器之间的规范。(本例就是 Django 和 uWSGI 之间)它使得Web App可以与Web Server顺利通信。所有使用 WSGI 的服务器都可以运行使用 WSGI 规范的web 框架。它规定WSGI application应该实现为一个可调用对象。

    1. uWSGI:

    uWSGI: 是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。

    用于接收前端服务器转发的动态请求并处理后发给 web 应用程序。

    1. uwsgi:

    uwsgi是uWSGI服务器实现的独有的协议。

    1. wsgi.py

    生成Django项目时默认生成的python文件,用于web server与Django进行通信。

    1. 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.

     

     

    展开全文
  • Python的Web开发中,如果使用Django框架,那么较为成熟稳定的服务器架构一般是Nginx+uWSGI+Django。而为什么一定要三个结合在一起呢?直接使用Django的runserver来启动服务器进程,或者uWSGI+Django可不可以呢?为...

    Python的Web开发中,如果使用Django框架,那么较为成熟稳定的服务器架构一般是Nginx+uWSGI+Django。而为什么一定要三个结合在一起呢?直接使用Django的runserver来启动服务器进程,或者uWSGI+Django可不可以呢?为什么? 
    概念说明:

    • APP(应用程序),就是开发者写的应用程序,例如django,bottle这些。记录怎么处理客户端发来的请求的逻辑部分。
    • WSGI,是一个协议,Python用于Web开发的协议
    • uWSGI,是一个程序,充当Web服务器或中间件。
      • 如果架构是Nginx+uWSGI+APP,uWSGI是一个中间件
      • 如果架构是uWSGI+APP,uWSGI是一个服务器
    • uwsgi,是uWSGI程序实现的一个自有的协议。

    Web协议出现顺序: 
    CGI -> FCGI -> WSGI -> uwsgi

    1. CGI,最早的协议
    2. FCGI,比CGI快
    3. WSGI,Python专用的协议
    4. uwsgi,比FCGI和WSGI都快,是uWSGI项目自有的协议,主要特征是采用二进制来存储数据,之前的协议都是使用字符串,所以在存储空间和解析速度上,都优于字符串型协议.官方介绍

    一、WSGI协议

    浏览器请求一个页面的流程:

    1. 浏览器发送请求给服务器,包含请求头和请求体
    2. 服务器解析请求头和请求体
    3. 服务器根据请求信息来处理请求,生成返回内容
    4. 服务器生成响应头和响应体
    5. 服务器返回响应给浏览器,浏览器显示给用户

    一个网站,一般有很多个不同的请求,在这些请求中,基本1,2,4,5部都是固定的,变的只有第三步,所以把这四步抽象出来,让开发者只关注第三步,这样就可以极大提升开发效率。所以WSGI协议诞生了。 
    WSGI,全称 Web Server Gateway Interface。是Python专用的协议,其他语言没有。用于处理Web服务器和应用程序(APP)的交互信息。很多Web框架(如:django)都会自带WSGI服务器,但是性能不好,只作测试用途。

    实现一个最简单的服务器

    1. #app.py
    1. def application(environ, start_response):
    2.     start_response('200 OK',[('Content-Type','text/html')])
    3.     return'<h1>Hello, web!</h1>'
    • environ参数是一个字典对象,保存HTTP请求的信息。例如URL路径,域名,请求头,请求参数等
    • start_response参数是一个函数,用于向wsgiref提供响应头的设置,只能调用一次。
    1. server.py
    1. # 从wsgiref模块导入:
    2. from wsgiref.simple_server import make_server
    3. # 导入我们自己编写的application函数:
    4. from app import application
    5. # 创建一个服务器,IP地址为空,端口是8000,处理函数是application:
    6. httpd = make_server('',8000, application)
    7. print"Serving HTTP on port 8000..."
    8. # 开始监听HTTP请求:
    9. httpd.serve_forever()
    1. 启动python server.py,就可以通过localhost:8000访问了

    wsgiref模块是python提供的,用于测试和学习的简单的WSGI服务器模块。 
    这个模块监听8000端口,把Http请求,根据WSGI协议,转换application函数中的environ参数,然后调用application函数。 
    wsgiref会把application函数提供的响应头设置转换为HTTP协议的响应头,把application的返回(return)作为响应体,根据HTTP协议,生成响应,返回给浏览器。


    这样,应用程序就不需要关注底层的HTTP协议细则了

    二、CGI和FastCGI

    CGI是Common Gateway Interface,即通用网关接口,是一个协议,是外部应用程序(CGI程序)与Web服务器之间的接口标准。该协议定义了Web服务器在调用应用程序时需要传输的参数和应用程序怎么返回结果给Web服务器,其实跟WSGI类似。 
    CGI的一个特点是,对于每一个HTTP请求,Web服务器都会新建一个进程(fork),等应用程序返回结果后,这个进程就会结束。这样的后果是,一旦HTTP请求多的时候,Web服务器会频繁创建进程,大家都知道,创建进程的开销是非常大的,所以这种做法会影响服务器的性能,所以就有了FastCGI。 
    FCGI的做法是在Web服务器启动的时候,就创建多个应用程序进程,当Web服务器接收到HTTP请求时,就把请求分发给其中一个空闲的进程。相当于MYSQL连接池的原理。这样就可以避免频繁地fork进程。FCGI另一个特点是支持分布式,也就是Web服务器和应用程序可以在不同的机器。 
    CGI和WSGI的区别是

    • CGI的出现更加早,这个是通用的接口,应用程序可以是JAVA,Python,等多种语言程序
    • WSGI是Python专用的,在CGI的基础上改进的协议

    三、Nginx

    Ningx是一个反向代理服务器 
    什么是反向代理?

    1. 正向代理,例如FQ用的代理服务器就是正向代理,浏览器主动请求代理服务器,代理服务器转发请求到对应的目标服务器
    2. 反向代理,部署在Web服务器上,代理所有外部网络对内部网络的访问。浏览器访问服务器,必须经过这个代理,是被动的。 
      正向代理的主动方是客户端,反向代理的主动方是Web服务器。 
      结构图: 


    反向代理的作用:

    1. 安全,客户端对Web服务器的访问需要先经过反向代理服务器。这样可以防止外部程序对Web服务器的直接攻击。
    2. 负载均衡,反向代理服务器可以根据Web服务器的负载情况,动态地把HTTP请求交给不同的Web服务器来处理,前提是要有多个Web服务器。
    3. 提升Web服务器的IO性能。一个HTTP请求的数据,从客户端传输给服务器,是需要时间的,例如N秒,如果直接传给Web服务器,Web服务器就需要让一个进程阻塞N秒,来接收IO,这样会降低Web服务器的性能。如果使用反向代理服务器,先让反向代理服务器接收完整个HTTP请求,再把请求发给Web服务器,就能提升Web服务器的性能。还有一些静态文件的请求,可以直接交给反向代理来处理,不需要经过Web服务器。

    Nginx是一个高性能的HTTP和反向代理服务器。

    Nginx+uWSGI+应用程序的架构: 



    其中Nginx和uWSGI之间可以通过CGI,FCGI和uwsgi协议通信,当然uwsgi的性能是最好的。

    四、总结

    1. uWSGI+Django比单独使用Django的好处:
      • 支持的并发量更高
      • 方便管理多进程,发挥多核的优势
      • 提升性能,因为uwsgi协议比WSGI协议有优势











    展开全文
  • nginx+uWSGI的部署原理

    2020-05-12 08:37:48
    ginx 和 uWISG 服务器之间如何配合工作的...uwsgi 和 WSGI 协议,找到对应的 Django 框架,Django 框架下的应用进行逻辑处理后,将返回值发送到 uwsgi 服务,然后 uwsgi 服务再返回给 nginx,最后 nginx 将返回值返回给

    ginx 和 uWISG 服务器之间如何配合工作的
    首先浏览器发起 http 请求到 nginx 服务,Nginx 根据接收到请求包,进行 url 分析,判断访问的资源类型,如果是静态资源,直接读取静态资源返回给浏览器,如果请求的是动态资源就转交给 uwsgi 服务,uwsgi 服务根据自身的 uwsgi 和 WSGI 协议,找到对应的 Django 框架,Django 框架下的应用进行逻辑处理后,将返回值发送到 uwsgi 服务,然后 uwsgi 服务再返回给 nginx,最后 nginx 将返回值返回给浏览器进行渲染显示给用户。

    摘自(https://blog.csdn.net/weixin_42218868/article/details/99660895)

    WSGI、uWSGI和nginx之间的关系

    WSGI 是一种 Web 服务器网关接口。它是一 个 Web 服务器(如 nginx,uWSGI 等服务器)与 web 应用(如用 Flask 框架写的程序)通信的一种规范。 简单而言, WSGI 是一种通信协议。

    uWSGI 是一个 Web 服务器,它实现了 WSGI、uwsgi等协议。uwsgi协议是一个uWSGI服务器自有的协议,uwsgi 是一种线路协议而不是通信协议,在此常用于在 uWSGI 服务器与其他网络服务器的数据通信。 简单而言,uWSGI 是实现了 uwsgi 和 WSGI 两种协议的 Web 服务器。

    nginx 是一个开源的高性能的 HTTP 服务器和反向代理:

    作为 web 服务器,它处理静态文件和索引文件效果非常高;
    它的设计非常注重效率,最大支持 5 万个并发连接,但只占用很少的内存空间;
    稳定性高,配置简洁;
    强大的反向代理和负载均衡功能,平衡集群中各个服务器的负载压力应用

    在这里插入图片描述
    摘自(https://blog.csdn.net/apollo_miracle/article/details/86910402?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.nonecase)

    展开全文
  • Nginx+uWSGI+Django原理 Python的Web开发中,如果使用Django框架,那么较为成熟稳定的服务器架构一般是Nginx+uWSGI+Django。而为什么一定要三个结合在一起呢?直接使用Django的runserver来启动服务器进程,或者...
  • uwsgi+nginx原理介绍

    2019-07-30 16:35:03
    1.WIGS(Web Server Gateway ...Nginx接受来自客户端的Http请求发送给uWSGIuWSGI处理请求并将关键信息传递给web应用(django,flask等),应用返回Response经由uWSGI发送给Nginx,Nginx再发送给客户端。
  • uwsgi

    2019-07-18 16:45:00
    项目部署:基本原理 利用nginx 反向代理到Uwsgi的端口 通过socket协议, nginx 可以快速的处理静态资源,uwsgi不行 动态资源给uwsgi处理 启动 python manage.py runserver 0.0.0.0:8000 也是通过wsgi协议 只...
  • nginx+uwsgi+django 部署原理

    千次阅读 2015-07-27 10:17:53
    python开发群里经常有同学问 nginx+uwsgi+django 着了教程部署,但是不知道他们之间怎么样的关系,于是我就google到了一个让我看起来很认同的图,大家看了也比较认同,于是就分享出来下。 这是这张图的出处 点击
  • Python的Web开发中,如果使用Django框架,那么较为成熟稳定的服务器架构一般是Nginx+uWSGI+Django。而为什么一定要三个结合在一起呢?直接使用Django的runserver来启动服务器进程,或者uWSGI+Django可不可以呢?为...
  • Nginx+uWSGI+Django原理架构简介:名词概念CGI和FastCGI 架构简介: 当前Python Web 开发框架中最常用的是Django,当然也有flask,bottle等等。这里主要介绍一下Django的服务器架构。 使用Django框架开发部署时,一般...
  • Python的Web开发中,如果使用Django框架,那么较为成熟稳定的服务器架构一般是Nginx+uWSGI+Django。而为什么一定要三个结合在一起呢?直接使用Django的runserver来启动服务器进程,或者uWSGI+Django可不可以呢?为...
  • nginx + uwsgi + Django 部署配置...nginx + uwsgi + Django 配置方案原理 原理图 浏览器发起web请求 < ---- > nginx接受到浏览器请求 < ----- > uwsgi 处理请求 < ----- > 经过wsgi请求django...
  • uWSGI+Django+Nginx的工作原理流程与部署历程:https://blog.csdn.net/c465869935/article/details/53242126 WSGI WSGI的全称是Web Server Gateway Interface(Web服务器网关接口),它不是服务器、python模块、...
  • 1、Python manage.py runserver 运行服务只适用于测试和开发阶段生产上一般使用 Django Nginx + uwsgi搭配提供web server 2、Django Nginx + uwsgi原理如下图:the web client &lt;-&gt; the web server &...
  • uwsgi:一种通信协议,是uWSGI服务器自有的协议,它用于定义传输信息的类型。 uWSGI:一种python web server或称为Server/Gateway,实现了uwsgi和WSGI两种协议的web服务器,负责响应python的web...
  • uWSGI+django+nginx的工作原理流程与部署历程

    万次阅读 多人点赞 2016-11-20 22:24:40
    uWSGI+django+nginx工作原理流程及部署过程 django 一个基于python的开源web框架 uWSGI 一个基于自有的uwsgi协议、wsgi协议和http服务协议的web网关 nginx 常用高性能代理服务器 wsgi.py django项目携带的一个wsgi...
  • 名词: wsgi:一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议,实现了python web程序与服务器之间交互的通用性。...uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输...
  • django+uWSGI+nginx的工作原理流程与部署过程 一、前言 知识的分享,不应该只是展示出来,还应该解释这样做是为什么... 献给和我一样懵懂中不断汲取知识,进步的人们。 授人与鱼,不如授人以渔! 二、必要的前提...
  • CGI、FastCGI、WSGI、uwsgiuWSGI 1. CGI 1.1 CGI简介 1.2 Web服务器与CGI程序的交互 1.3 CGI工作原理 2. FastCGI 2.1 FastCGI简介 2.2 FastCGI工作原理 3. WSGI 4. uwsgi 5. uWSGI 6. 区分WSGI / uwsgi / ...
  • 原理一  Http请求和web服务器 一、Http请求   用户打开浏览器并输入一串url地址时,到最终页面内容呈现在用户眼前时,这之间的步骤可大致整理如下:   &n...
  • 1.概念解析(wsgi协议,uwsgi协议,uWSGI)  参考:https://www.cnblogs.com/wspblog/p/8575101.html  1.1 现实世界的web请求:  1.2 wsgi协议,uwsgi协议和uWSGI  a. WSGI(wsgi): 全称 Web Server ...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 167
精华内容 66
关键字:

uwsgi原理