一文搞懂 CGI, FastCGI, WSGI, uWSGI
一、CGI
1、通用网关接口(Common Gateway Interface/CGI)
可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。
2、CGI程序可以用任何脚本语言或者是完全独立编程语言实现,只要这个语言可以在这个系统上运行。
3、用来规范web服务器传输到php解释器中的数据类型以及数据格式,包括URL、查询字符串、POST数据、HTTP header等,也就是为了保证web server传递过来的数据是标准格式的
4、一句话总结: 一个标准,定义了客户端服务器之间如何传数据
二、FastCGI
1、快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本。
2、FastCGI致力于减少网页服务器与CGI程序之间互动的开销,从而使服务器可以同时处理更多的网页请求。
3、使用FastCGI的服务器:
Apache HTTP Server (部分) Cherokee HTTP Server Hiawatha Webserver Lighttpd Nginx LiteSpeed Web Server Microsoft IIS
4、一句话总结: CGI的升级版
三、WSGI(协议规范或者说接口标准)
1、Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。自从WSGI被开发出来以后,许多其它语言中也出现了类似接口。
2、wsgi server (比如uWSGI) 要和 wsgi application(比如django )交互,uwsgi需要将过来的请求转给django 处理,那么uWSGI 和 django的交互和调用就需要一个统一的规范,这个规范就是WSGI WSGI(Web Server Gateway Interface)
3、WSGI,全称 Web Server Gateway Interface,或者 Python Web Server Gateway Interface ,是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。自从 WSGI 被开发出来以后,许多其它语言中也出现了类似接口。
4、WSGI 的官方定义是,the Python Web Server Gateway Interface。从名字就可以看出来,这东西是一个Gateway,也就是网关。网关的作用就是在协议之间进行转换。
5、WSGI 是作为 Web 服务器与 Web 应用程序或应用框架之间的一种低级别的接口,以提升可移植 Web 应用开发的共同点。WSGI 是基于现存的 CGI 标准而设计的
6、一句话总结: 为Python定义的web服务器和web框架之间的接口标准
四、uWSGI(既是协议规范也是服务器软件)
1、uWSGI 是实现了WSGI协议、uwsgi协议、http等协议的一个Web服务器。它旨在提供全栈服务,用以部署Python Web应用。uWSGI 既是一个软件,也是一个协议,但在大多数情况下,当提到uWSGI时,指的是uWSGI服务器。
2、使用场景
- 大型和高性能Web应用:uWSGI 提供了大量的配置选项、优化功能和插件,非常适合构建大型或者要求高性能的Web应用。
- 企业环境:需要与nginx等Web服务器结合使用,因为uWSGI可以作为应用服务器,处理Python应用的执行,并与Web服务器进行通信。
3、优点
- 性能优秀:uWSGI是一个C程序,为性能进行了优化。
- 功能丰富:uWSGI支持热更新、日志记录、负载均衡等高级功能。
- 高度可配置:uWSGI提供了非常多的配置选项,可以非常精细地控制Web服务器的行为。
4、WSGI的具体实现
wsgiref
- 简介:
wsgiref
是Python标准库的一部分,提供了WSGI规范的参考实现。主要用于开发和测试环境,而不是生产环境,因为它比较基础和简单。 - 组件:
wsgiref
包括服务器、验证器、工具和引用实现等组件,方便开发者对WSGI应用进行测试和开发。
Werkzeug
- 简介:
Werkzeug
是一个WSGI工具库,不仅实现了WSGI接口规范,还提供了大量有用的Web开发工具。它可以看作是开发Python Web应用的底层库,被许多其他Python Web框架广泛使用,如Flask。 - 特点:提供了一套灵活的工具集,包括请求、响应对象、路由系统以及各种各样的工具函数,从而简化了Web应用的开发。
uWSGI
- 简介:
uWSGI
是一个功能强大的应用服务器,用于托管Python(以及其他语言编写的)Web应用。它实现了WSGI规范,并提供了uwsgi协议,是nginx等Web服务器与Web应用或框架之间沟通的一种方式。 - 特点:具备高性能,可高度定制和扩展,支持多种语言。它专注于性能、资源使用和微服务架构,适用于各种规模的Web应用。
Gunicorn
- 简介:
Gunicorn
("Green Unicorn") 是一个Python WSGI HTTP服务器,提供了一个预分叉的工作模式,主要面向从小型到中等规模负载的Web应用。 - 特点:易于安装和使用,支持同步和异步工作模式,通过预分叉工作进程以提高性能和并发处理能力。对Django、Flask等流行Web框架支持良好。
Tornado
- 简介:
Tornado
是一个Python Web框架和异步网络库,它不仅实现了WSGI接口,还提供了自己的非阻塞网络I/O处理能力。 - 特点:专为处理大量并发连接设计,适用于需要实时功能(如长连接或WebSockets)的应用。与传统的阻塞式服务器或框架相比,Tornado可以提供更高的性能和可伸缩性。
五、uwsgi
Nginx服务器配置代理请求到后端uwsgi应用服务器
方式一:
# 该方式使用uWSGI作为应用服务器,通过IP地址和端口号进行连接 location / { include uwsgi_params; # 导入一个Nginx模块,用于和uWSGI进行通讯 uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间 uwsgi_pass 101.133.225.166:8080; # 将请求转发到指定的uWSGI服务器 }
方式二:
# 该方式同样使用uWSGI作为应用服务器,通过UNIX域套接字文件进行连接 location / { include uwsgi_params; # 导入一个Nginx模块,用于和uWSGI进行通讯 uwsgi_pass unix:///var/www/script/uwsgi.sock; # 将请求转发到指定的uWSGI服务器的sock文件 }
方式三:
# 该方式使用普通的HTTP代理方式,将请求代理到指定的后端服务器 location / { proxy_pass http://101.133.225.166:8088; # 将请求代理转发到指定的HTTP服务器 }