Django——wsgiref,cgi,FastCGI,WSGI,uWSGI,uwsgi,Nginx介绍

一、wsgiref

wsgiref则是官方给出的一个实现了WSGI标准用于演示用的简单Python内置库,
它实现了一个简单的WSGI Server和WSGI Application(在simple_server模块中),
主要分为五个模块:simple_server, util, headers, handlers, validate

二、cgi

公共网关接口(Common Gateway Interface,CGI)是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。
CGI 应用程序能与浏览器进行交互,还可通过数据API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。
格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。
几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、Java、VB 和Delphi 等。
CGI分为标准CGI和间接CGI两种。
标准CGI使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。
间接CGI又称缓冲CGI,在CGI程序和CGI接口之间插入一个缓冲程序,缓冲程序与CGI接口间用标准输入输出进行通信 。
​
CGI是外部扩展应用程序与 Web 服务器交互的一个标准接口。
服务器端与客户端进行交互的常见方式多,CGI 技术就是其中之一。
根据CGI标准,编写外部扩展应用程序,可以对客户端浏览器输入的数据进行处理,完成客户端与服务器的交互操作。
CGI规范定义了Web服务器如何向扩展应用程序发送消息,在收到扩展应用程序的信息后又如何进行处理等内容。
对于许多静态的HTML网页无法实现的功能,通过 CGI可以实现,比如表单的处理、对数据库的访问、搜索引擎、基于Web的数据库访问等等.
​
使用CGI实现客户端与服务器的交互有以下几个标准步骤,具体步骤如下:
(1)Web 客户端的浏览器将URL的第一部分解码与Web服务器相连。
(2)Web 浏览器将URL的其余部分提供给服务器。
(3)Web 服务器将URL转换成路径和文件名。
(4)Web 服务器发送 HTML 和别的组成请求页面的文件给客户。一旦页面内容传送完,
这个连接自动断开。
(5)在客户端,HTML脚本提示用户做动作或输入。当用户响应后,客户请求Web服务器建立一个新的连接。
(6)Web 服务器把这些信息和别的进程变量传送给由HTML以URL的形式指定CGI程序。
(7)CGI 根据输入作出响应,把响应结果传送给 Web 服务器。
(8)Web 服务器把响应的数据传给客户,完成后关闭连接。 
服务器端 CGI 程序接收信息有三种途径:环境变量、命令行和标准输入。

详见 https://baike.baidu.com/item/CGI/607810?fr=aladdin

 中文名公共网关接口
  外文名 Common Gateway Interface
CGI 功 能 用来解释处理来自表单的输入信息
  类 别 标准CGI和间接CGI
  定 义 Web 服务器运行时外部程序的规范

三、FastCGI

fastcgi 这个技术标准作为一种替代 cgi 的技术标准, fastcgi 有如下优点(稳定,安全,高性能,方便扩展)
​
从稳定性上看, fastcgi 是以独立的进程池运行来 cgi,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑.
从安全性上看, fastcgi 和宿主的 server 完全独立, fastcgi 怎么 down 也不会把 server 搞垮,
从性能上看, fastcgi 把动态逻辑的处理从 server 中分离出来, 大负荷的 IO 处理还是留给宿主 server, 这样宿主 server 可以一心一意作 IO,
对于一个普通的动态网页来说, 逻辑处理可能只有一小部分, 大量的图片等静态 IO 处理完全不需要逻辑程序的参与
从扩展性上讲, fastcgi 是一个中立的技术标准, 完全可以支持任何语言写的处理程序(php,java,python...)

四、WSGI

回答方式一:

WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口。
具体的来说,WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。

回答方式二:

Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。
自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。
​
PythonWeb服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是Python应用程序或框架和Web服务器之间的一种接口,
已经被广泛接受, 已基本达成它的可移植性方面的目标。
WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行, 反之亦然。 WSGI标准在 PEP
333 [1] 中定义并被许多框架实现,其中包括现广泛使用的django框架。



 中文名web服务器网关接口
  语言 python
WSGI 全称 Python Web Server Gateway Interface
  特点 多线程
  释义 Web服务器和Web应用程序或框架之间的一种简单而通用的接口

 

五、uWSGI(重点)

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
​
uWSGI的适用:
1.单节点服务器的简易部署
2.轻量级,好部署

 中文名uWSGI
  外文名 uWSGI
uwsgi 开发语言 C语言
  释 义 一个web服务器

 

六、uwsgi

与WSGI一样,是uWSGI服务器的独占通信协议,用于定义传输信息的类型。

每一个uwsgi packet前4byte为传输信息类型的描述,与WSGI协议是两种东西,据说该协议是fcgi协议的10倍快。

七、uWSGI与uwsgi区别(重点)

uWSGI是一个 Web 服务器,它实现了WSGI 协议、uwsgi、http 等协议。
注意 uwsgi 是一种通信协议,而 uWSGI 是实现 uwsgi 协议和 WSGI 协议的Web 服务器。
uWSGI 具有超快的性能、低内存占用和多app 管理等优点,并且搭配着 Nginx就是一个生产环境了,能够将用户访问请求与应用 app 隔离开,实现真正的部署。
相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。

七、WSGI / uwsgi / uWSGI 概念的区分(重点)

WSGI是一种通信协议。
uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西。

 

八、Nginx(重点)

回答方式一:

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

回答方式二:

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的Web 服务器
/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。
其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。 ​ Nginx是一个Web服务器其中的HTTP服务器功能和uWSGI功能很类似,但是Nginx还可以用作更多用途,比如最常用的反向代理功能。
nginx的作用:
1.反向代理,可以拦截一些web攻击,保护后端的web服务器 2.负载均衡,根据轮询算法,分配请求到多节点web服务器 3.缓存静态资源,加快访问速度,释放web服务器的内存占用,专项专用

详见https://baike.baidu.com/item/nginx/3817705?fr=aladdin#1

 中文名nginx
Nginx 外文名 Nginx
  别 名 engine x
  软件许可 BSD许可
  软件类型 开源软件,网页服务器软件
  兼容性 Linux系统,Windows NT系统,OS
  最新生产版本 1.18.0
  最新主线版本 1.19.1

 

九、Nginx和uwsgi

1.使用的代理一共有两个,nginx和uwsgi,先说明一下,如果不用nginx一样可以访问web项目,使用nginx的目的是为了安全和负载均衡。
配置了nginx做前端代理,uwsgi作后端代理的服务器(这里所说的前后端都是相对的位置,并无实际含义),
在处理来自Internet的请求时,要先经过nginx的处理,nginx把请求再交给uwsgi,经过uwsgi才能访问到项目本身。 ​
2.没有nginx而只有uwsgi的服务器,则是Internet请求直接由uwsgi处理,并反馈到web项目中。
nginx可以实现安全过滤,防DDOS等保护安全的操作,并且如果配置了多台服务器,nginx可以保证服务器的负载相对均衡。 而uwsgi则是一个web服务器,实现了WSGI协议(Web Server Gateway Interface),http协议等,它可以接收和处理请求,发出响应等。所以只用uwsgi也是可以的。 ​

十、nginx和uWISG 服务器之间如何配合工作的?(重点)

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

 

原文地址:https://www.cnblogs.com/guojieying/p/13741333.html