WSGI

WSGI的全称是Web Server Gateway Interface(Web服务器网关接口),它不是服务器、python模块、框架、API或者任何软件,只是一种描述web服务器(如nginx,uWSGI等服务器)如何与web应用程序(如用Django、Flask框架写的程序)通信的规范。

server和application的规范在PEP3333中有具体描述,要实现WSGI协议,必须同时实现web server和web application,当前运行在WSGI协议之上的web框架有Bottle, Flask, Django。

uWSGI

uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。

uwsgi

与WSGI一样,是uWSGI服务器的独占通信协议,用于定义传输信息的类型(type of information)。每一个uwsgi packet前4byte为传输信息类型的描述,与WSGI协议是两种东西,据说该协议是fcgi协议的10倍快。

Nginx

Nginx是一个Web服务器其中的HTTP服务器功能和uWSGI功能很类似,但是Nginx还可以用作更多用途,比如最常用的反向代理功能。

Django

Django是一个Web框架,框架的作用在于处理request和 reponse,其他的不是框架所关心的内容。所以如何部署Django不是Django所需要关心的。

Django所提供的是一个开发服务器,这个开发服务器,没有经过安全测试,而且使用的是Python自带的simple HTTPServer 创建的,在安全性和效率上都是不行的。

以下是最新版本Django有关runserver command的代码节选

  • django.core.management.commands.runserver.Command:run

  • django.core.management.commands.runserver.Command:inner_run

其中inner_run函数中的run方法和run方法中server_cls 参数分别取自

  • django.core.servers.basehttp:run

  • django.core.servers.basehttp:WSGIServer

在Django源码中可以很清楚的看出来,runserver起来的HTTPServer 就是Python自带的simple_server。而WSGIServer的父类就是wsgiref.simple_server。既然是simple了很多东西都是不太可以的。

访问过程

用一张图来描述一下上述过程:

一个成熟的站点提供服务,需要Web服务器(静态数据)和App服务器(动态数据)。Web服务器目前属Nginx最强大,用户请求代理过来后,把数据返回给请求客户端。但是目前的互联网发展时代,都是包含动态数据处理的,这样一般Nginx不处理业务逻辑,都外包给后端的App服务器,就是你的django服务器。

在需要性能优化的场景,通常单单nginx和uWSGI也是不够的。nginx主要优化的是连接数和静态文,uWSGI主要优化的是wsgi 服务,这些都只是手段。其它手段包括,优化数据库,增加缓存,加入负载均衡器,引入异步IO框架(如gunicorn 服务器的gevent框架),计算密集型模块用C重写等。 安全性方面,也会有很多考虑,这里不展开。

转载于:https://blog.51cto.com/461205160/2295827

WSGI,uWSGI,uwsgi,Nginx相关推荐

  1. Python对接微信小程序V3接口进行支付,并使用uwsgi+nginx+django进行https部署

    网上找了很多教程,但是很乱很杂,并且教程资源很少且说的详细.这里就记录一下分享给大家 共分为以下几个步骤: 一.开始前准备信息 二.使用前端code获取用户的openid 三.对接小程序v3接口下单 ...

  2. uwsgi django nginx多站点 pyvenv virutalvenv python 3 django 2这些限制下,如何让uwsgi跑起来?...

    之前正式环境是跑的uwsgi,这次升级之后, 以前的nginx和uwsgi的配置都过时而不可用了. 我们需要的是通过二级目录访问,而不能用根目录, 因为根目录用于整体工具的网页导航. 这次重新搜索了文 ...

  3. 【7W字长文】使用LVS+Keepalived实现Nginx高可用,一文搞懂Nginx

    往期文章一览 分布式会话与单点登录SSO系统CAS,包含完整示例代码实现 [15W字长文]主从复制高可用Redis集群,完整包含Redis所有知识点 使用LVS+Keepalived实现Nginx高可 ...

  4. rap2搭建,mysql,redis,nginx安装,node环境安装,rap2安装

    所需环境 1.mysql 2.redis 3.nginx安装 4.npm/nodejs环境 5.rap2-delos端安装 6.客户端dolores环境搭建 1.mysql安装 CentOS7的yum ...

  5. MySQL与Redis数据库结合——redis作为mysql的缓存服务器,实现读写分离(nginx+php+redis+mysql)

    文章目录 一.读写分离的背景 二.搭建nginx+php+redis+mysql 实验环境 实验 1.在server1上安装nginx+php 建立php和redis,mysql的连接 2.在serv ...

  6. 从0开始,在Linux中配置Nginx反向代理、负载均衡、session共享、动静分离

    写这篇文章花费了我近一周的时间,参考网上许多优秀的博客文章,我不敢说写的很好,至少很全很详细.本文先介绍原理部分,然后再进行实战操作,我认为这样才会有更深的理解,不过这也导致了文章篇幅很长.但是,如果 ...

  7. Nginx 之父被拘留,时隔15年后,前老板提起了版权侵权诉讼!

    点击上方蓝色"视学算法",选择"设为星标" 作者 | oschina 来源 | oschina.net/news/112046/russian-police-r ...

  8. php-cgi和php-fpm,Windows环境下解决Nginx+php并发访问阻塞问题。

    php-cgi 是运行php, php-fpm是守护php-cgi进程 nginx配置目录运行php         location  ~ \.php$         {              ...

  9. [腾讯云]简单在腾讯云 CenTOS7.0 安装Nginx,Mysql(MariaDB),Memcache,解析PHP!

    1.安装LNMP之前要安装EPEL,以便安装源以外的软件,如Nginx,phpMyAdmin等. yum install epel-release 2.安装Nginx a) yum install n ...

  10. Nginx反向代理,负载均衡,redis session共享,keepalived高可用

    本站点停止更新,请访问:blog.coocap.com 相关知识自行搜索,直接上干货... 使用的资源: nginx主服务器一台,nginx备服务器一台,使用keepalived进行宕机切换. tom ...

最新文章

  1. C#实现对象的Xml格式序列化及反序列化
  2. PTA基础编程题目集-6-11 求自定类型元素序列的中位数
  3. 如何彻底禁用VS 2008的智能感知功能
  4. SPRING STS Virgo OSGI 开发一 : bundle 项目的创建
  5. 个人博客作业week1
  6. 当你用钥匙开不开门时
  7. Ubuntu 15.1 unity在顶部面板显示系统CPU/内存/网络速度
  8. 多线程编程2-NSOperation
  9. 【7】jQuery学习——入门jQuery选择器之过滤选择器-可见性过滤选择器
  10. cloud 异步远程调用_异步远程工作的意外好处-以及如何拥抱它们
  11. LeetCode 1154. 一年中的第几天
  12. NVIDIA Parallel Nsight
  13. Express - NodeJS web开发框架
  14. 数组Array和字符串String的indexOf方法,以及ES7(ES2016)中新增的Array.prototype.includes方法...
  15. 多变量遗传算法python代码_遗传算法之Python实现代码
  16. python入门教程
  17. 《软件质量保证与测试》读书笔记(一)
  18. 农村三资管理平台app_鑫农三资app下载-鑫农三资app下载安卓版 v1.0.2_手机乐园
  19. asp big5 gb2312 转 Unicode
  20. 云空间插虾米html音乐,总结一下可以上传MP3并外链的空间

热门文章

  1. 【思科】BGP的community属性解析
  2. Android新浪微博登陆和获取个人信息
  3. #翻译NO.3# --- Spring Integration Framework
  4. Android特色开发之Google MAP
  5. Ms Press China MVP-书评活动-王万利 Microsoft Active Directory Administrator's Pocket Consultant...
  6. asp.net 包含动态创建控件的容器如果要切换显示/隐藏不要用 Visible 属性
  7. 如何将MP3格式音乐转换成M4R格式
  8. 改变自己从学习linux开始
  9. Flutter调试技巧总结——高效开发的秘密
  10. react-native 组件之间传值