Nginx+uWSGI+Django原理

.NET 10 新工具 dnx:像 npx 一样按需运行 .NET 工具 在软件开发中,命令行工具的按需执行是提升效率的关键。传统 .NET 生态依赖全局安装的 dotnet tool,常带来环境污染、版本冲突和 CI 配置繁琐等问题。.NET 10 内置的 dnx 工具运行器,借鉴 npx 和 uvx 的设计哲学,实现了“免安装、按需拉取、用完即走”的体验。它支持通过 NuGet 直接运行工具包,利用 DNX_CACHE_DIR 缓存加速重复执行,并可通过 dotnet-tools.json 锁定版本,完美适配多版本共存与持续集成场景。无论是临时数据迁移、代码格式化,还是团队统 阅读详情

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

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

一、WSGI协议

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

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

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

实现一个最简单的服务器

app.py

import pprint
def application(environ, start_response):
pprint.pprint(environ)
start_response('200 OK',[('Content-Type','text/html')])
return'<h1>Hello, web!</h1>'

environ参数是一个字典对象,保存HTTP请求的信息。例如URL路径,域名,请求头,请求参数等
start_response参数是一个函数,用于向wsgiref提供响应头的设置,只能调用一次。

server.py

# 从wsgiref模块导入:
from wsgiref.simple_server import make_server
# 导入我们自己编写的application函数:
from app import application
# 创建一个服务器,IP地址为空,端口是8000,处理函数是application:
httpd = make_server('',8000, application)
print"Serving HTTP on port 8000..."
# 开始监听HTTP请求:
httpd.serve_forever()

启动python server.py,就可以通过localhost:8000访问了

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

Alt text

这样,应用程序就不需要关注底层的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是一个反向代理服务器
什么是反向代理?

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

这里写图片描述

反向代理的作用:

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

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

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

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

uWSGI+Django比单独使用Django的好处:
    支持的并发量更高
    方便管理多进程,发挥多核的优势
    提升性能,因为uwsgi协议比WSGI协议有优势
Nginx+uWSGI+Django比uWSGI+Django好处(参考反向代理的作用):

最后附上一个介绍Nginx+uWSGI+Django的幻灯片

参考:
http://www.biaodianfu.com/cgi-fastcgi-wsgi.html
http://blog.youkuaiyun.com/qiaofeiw/article/details/9207359
http://www.cnblogs.com/wanghetao/p/3934350.html
http://book.51cto.com/art/201202/314840.htm
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832689740b04430a98f614b6da89da2157ea3efe2000
https://www.douban.com/note/13508388/
http://www.nowamagic.net/academy/detail/1330308
http://www.itopers.com:8080/?p=586

【2005】人工智能⭐ 问题的解答来自于过去的经验而不是规则,这些经验是以案例方式存储的。但是当人们遇到一个新的问题的时候,一般先是回忆,从记忆中找到一个与新的问题相似的案例,然后把该案例的有关信息和知识复用到新问题的求解之中。1、若案例(case)不够充足,而有足够的规则(知识),试问如何构建一个包含有基于案例推理和基于规则推理的推理系统,以使推理效率提高而且总能求得问题的解。一般认为,CBR适合缺乏完备和健全的理论,但又可获取丰富经验的领域,而RBR则适合于对领域有充分的认识,能以完备和健全的形式表示领域理论的场合。 阅读详情

相关推荐

给爸妈买的红米12C想装个老年桌面?先别急,解锁BL和Root前你得知道这些

本文详细解析了红米12C解锁BL和Root的利弊,为想要为长辈简化手机操作的用户提供全面指南。文章对比了BL解锁与Root的技术差异,推荐优先使用MIUI内置的极简模式等官方功能,并评估了Root的实际必要性。若必须Root,提供了安全操作流程和长期维护建议,帮助用户做出明智选择。

weixin_30265103的博客 318

uWSGI、WSGI和uwsgi、nginx

WSGI wsgi server (比如uWSGI) 要和 wsgi application(比如django )交互,uwsgi需要将过来的请求转给django 处理,那么uWSGI 和 django的交互和调用就需要一个统一的规范,这个规范就是WSGI WSGI(Web Server Gateway Interface) WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是...

热衷开源的Boy 395

LFM调制信号分类与检测识别

支持识别LFM信号、间歇采样干扰(ISRJ)、灵巧噪声干扰(SNJ)、扫频干扰(SJ)、瞄准干扰(AJ)、阻塞干扰(BJ)、密集假目标干扰(DFJ)、密集假目标加灵巧噪声干扰(DFWSNJ)、距离欺骗干扰(DDJ)、距离欺骗加灵巧噪声干扰(DDWSNJ)。Faster-RCNN支持检测识别LFM信号、间歇采样干扰(ISRJ)、灵巧噪声干扰(SNJ)、扫频干扰(SJ)、瞄准干扰(AJ)、密集假目标干扰(DFJ)、密集假目标加灵巧噪声干扰(DFWSNJ)、距离欺骗加灵巧噪声干扰(DDWSNJ)等8种信号。

菜yuan~的博客 1029

WSGI / uwsgi / uWSGI

WSGI是一种通信协议uwsgi是一种通信协议,常用于在uWSGI服务器与其他网络服务器的数据通信而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器百度百科上说uwsgi是一种线路协议而不是通信协议,个人更倾向于uwsgi是类似WSGI的通信协议的说法,uwsgi和WSGI都是基于CGI扩展出来的。

Renweif的博客 1120

DaVinciCFG实战:从ARXML配置到ADC代码生成全解析

本文详细解析了使用DaVinciCFG工具进行ADC模块配置的全过程,从ARXML文件处理到代码生成与集成。重点介绍了关键参数配置、ARXML语法规则、常见错误排查及代码优化技巧,帮助开发者掌握AUTOSAR架构下ADC驱动开发,提升汽车电子系统的可靠性。

f9g0h的博客 378

别再乱改宏定义了!STM32F103程序移植保姆级教程(从C8T6到ZET6实战)

本文详细解析了STM32F103程序从C8T6移植到ZET6的实战步骤,重点介绍了硬件差异、开发环境配置、时钟陷阱及外设处理等关键点。通过修改宏定义(如STM32F10X_HD)、调整启动文件和时钟配置,确保移植顺利进行。适合嵌入式开发者参考,避免常见移植问题。

weixin_42567497的博客 215

转:Django搭配FastCGI.

Django搭配FastCGI. 2011-07-17 01:57:41|分类: 默认分类 |标签: |字号大中小订阅 翻译:merlinHow to use Django with FastCGI 尽管现在评比的运行Django的措施是利用Apache加上flup,这是处理FastCGI的一个python库。请确保利用最新的SVN版本:-) 启用你的FastCGI...

weixin_30838921的博客 152

Frida三层次钩子快速逆向VMP+OLLVM加固APK

VMP(虚拟机保护)和OLLVM(控制流平坦化)是Android应用常见的双重混淆技术,其核心原理是将Java逻辑虚拟化、Native代码控制流打散,从而阻断传统静态分析与简单Hook。但任何混淆都必须在CPU上执行,因此必然暴露JNI注册行为、ABI参数传递规律及系统调用痕迹。基于此,Frida可通过跨层联动——从JNI_OnLoad捕获Native库加载、在VMP解释器入口截获字节码上下文、于关键系统调用(如read/gettimeofday)反向追踪数据流——构建可观测、可复现的动态分析链。该方法无需

weixin_30888413的博客 1002

[django]用fastcgi部署

django官方已经开始弃用fastcgi来部署django应用了,作为以前使用过的用户,还是贴一个配置,用来做纪念吧。。 项目下#! /bin/sh case "$@" in start) python manage.py runfcgi host=127.0.0.1 port=8400 ;; stop) kill -9 `p

orangleliu 笔记本 2712

新手必看!华为S5700交换机健康检查清单:从CPU到日志的完整巡检流程

本文为新手网管人员提供华为S5700交换机的健康检查完整指南,涵盖CPU、内存、温度、日志等核心指标的日常维护流程。通过详细的display命令和实用案例,帮助用户快速掌握设备体检技巧,确保交换机稳定运行。

weixin_29251337的博客 237

基于DeepFashion2数据集的服装检测系统:YOLOv11实现与UI界面开发

80万张高质量服装图片13个服装类别:短袖上衣、长袖上衣、短袖外套、长袖外套、背心、短裤、长裤、短裙、长裙、袜子、帽子、鞋、包包每张图片包含边界框、分割掩码、landmarks等标注多样化的场景:商业图片、街拍图片、消费者图片更高效的Backbone网络改进的特征金字塔网络(FPN)自适应训练样本分配策略更精确的损失函数以下是YOLOv11的模型定义:python复制下载# 模型参数self.nc = nc # 类别数。

YOLO 455

Nginx+uWSGI+Django 基本实现原理

Nginx+uWSGI+Django原理架构简介:名词概念CGI和FastCGI 架构简介: 当前Python Web 开发框架中最常用的是Django,当然也有flask,bottle等等。这里主要介绍一下Django的服务器架构。 使用Django框架开发部署时,一般会选择Nginx+uWSGI+Django 这样成熟稳定的服务器框架。如果我们选择Django自带的WSGI Server(ru...

中文过六级再取名的博客 515

CAN轴控制流【6041,6040】

【代码】CAN轴控制流【6041,6040】

cfqq1989的博客 1783

092、Django uWSGI Nginx原理详解

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

limengshi138392的博客 470

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

WSGI、uWSGI、uwsgi、Nginx概念知识及uWSGI+Django+Nginx的工作原理流程与部署历程

uWSGI+Django+Nginx的工作原理流程与部署历程:https://blog.youkuaiyun.com/c465869935/article/details/53242126 WSGI WSGI的全称是Web Server Gateway Interface(Web服务器网关接口),它不是服务器、python模块、框架、API或者任何软件,只是一种描述web服务器(如nginx,uWSGI等...

道可道 非常道 381

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Nginx+uWSGI+Django原理与实践

Python的Web开发中,如果使用Django框架,那么较为成熟稳定的服务器架构一般是Nginx+uWSGI+Django。而为什么一定要三个结合在一起呢?直接使用Django的runserver来启动服务器进程,或者uWSGI+Django可不可以呢?为什么?  概念说明: APP(应用程序),就是开发者写的应用程序,例如django,bottle这些。记录怎么处理客户端发来的请求的逻

Enweitech Software Works 1036

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Nginx+uWSGI+Django 原理详解

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

灰寨小学的python---小陈 489

Django部署方法以及Nginx,uWSGI,Django部署原理

nginx + uwsgi + Django 部署配置方案 nginx, uwsgi, Django 三者关系 配置方法 nginx + uwsgi + Django 配置方案原理 原理图 浏览器发起web请求 < ---- > nginx接受到浏览器请求 < ----- > uwsgi 处理请求 < ----- > 经过wsgi请求django...

qq_24724109的博客 378

nginx+uwsgi+django 部署原理

python开发群里经常有同学问 nginx+uwsgi+django 着了教程部署,但是不知道他们之间怎么样的关系,于是我就google到了一个让我看起来很认同的图,大家看了也比较认同,于是就分享出来下。 这是这张图的出处 点击

orangleliu 笔记本 3645

uwsgi+nginx部署django项目(有图原理的详细展示的)

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 Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 ...

gb4215287的博客 1303

Django+nginx+uwsgi 部署原理

Python的Web开发中,如果使用Django框架,那么较为成熟稳定的服务器架构一般是Nginx+uWSGI+Django。而为什么一定要三个结合在一起呢?直接使用Django的runserver来启动服务器进程,或者uWSGI+Django可不可以呢?为什么? 概念说明:APP(应用程序),就是开发者写的应用程序,例如django,bottle这些。记录怎么处理客户端发来的请求的逻辑部分。WS

qq_39660279的博客 312

uWSGI/nginx/django的工作原理流程

wsgi:一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议,实现了python web程序与服务器之间交互的通用性。 uwsgi:一种通信协议,是uWSGI服务器自有的协议,它用于定义传输信息的类型。 uWSGI:一种python web server或称为Server/Gateway,实现了uwsgi和WSGI两种协议的web服务器,负责响应python的web...

优快云 3611

uWSGI+django+nginx的工作原理流程

名词: wsgi:一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议,实现了python web程序与服务器之间交互的通用性。 利用它,web.py或bottle或者django等等的python web开发框架,就可以轻松地部署在不同的web server上了; uwsgi:同WSGI一样是一种通信协议 uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输...

you are sherlocked by me! 431

django+uWSGI+nginx的工作原理流程与部署过程

django+uWSGI+nginx的工作原理流程与部署过程 一、前言 知识的分享,不应该只是展示出来,还应该解释这样做是为什么... 献给和我一样懵懂中不断汲取知识,进步的人们。 授人与鱼,不如授人以渔! 二、必要的前提知识 2.1 准备知识 Django .基于python的一个web框架,同类框架有Flask、Tornado... uWSGI .实现了WSGI协议的一个web...

weixin_30852367的博客 232

uWSGI+django+nginx的工作原理流程与部署历程

转载: uWSGI+django+nginx的工作原理流程与部署历程 https://blog.youkuaiyun.com/c465869935/article/details/53242126?fps=1&amp;amp;locationNum=6 uWSGI+django+nginx的工作原理流程与部署历程 转载_稍微改动(Centos 7环境) https://blog.youkuaiyun.com/zha...

hunjiancuo5340的博客 238
上一篇: Python正则表达式指南
下一篇: Qt Creator 快捷键
runnerred
博客等级 码龄15年 2粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值