cgi,fastcgi,wsgi,uwsgi,uWSGI分别是什么

CGI(Common Gateway Interface):通用网关接口(最基础的协议)

  1. 定义
    CGI 是最早的 Web 服务器与外部应用程序通信的标准协议,是一套 "约定"------ 规定了 Web 服务器如何把客户端的 HTTP 请求传递给后端脚本,以及脚本如何把处理结果返回给服务器。
  2. 工作原理
  • Web 服务器收到客户端请求后,为每个请求创建一个新的进程;
  • 服务器将请求信息(如 HTTP 方法、请求参数、Cookie)通过「环境变量 + 标准输入」传给 CGI 脚本;
  • 脚本处理完请求,通过「标准输出」把响应内容(如 HTML、JSON)返回给服务器;
  • 服务器把响应转发给客户端,然后销毁这个临时进程。
  1. 核心问题
    每次请求都创建 / 销毁进程,开销极大,并发量稍高就会性能暴跌,现在几乎被淘汰。
  2. 例子
    早期的Python CGI 脚本(需配置 Apache/Nginx的CGI模块,指定脚本路径)。

FastCGI(Fast Common Gateway Interface):CGI 的高性能升级版(通用协议)

  1. 定义
    FastCGI 是 CGI 的改进版,同样是跨语言、跨平台的通信协议,核心目标是解决 CGI "每次请求创建进程" 的性能问题。
  2. 工作原理
  • 启动时就创建常驻的 FastCGI Worker 进程池(而非每次请求创建);
  • Web 服务器收到请求后,直接与这些常驻进程通信(复用进程),无需重复创建 / 销毁;
  • 进程池可动态扩缩容,处理完请求后进程不销毁,等待下一次请求。
  1. 核心优势
  • 长连接 + 进程复用,性能比 CGI 提升一个量级;
  • 支持分布式部署(FastCGI 进程可运行在另一台服务器);
  1. 适用场景
  • 所有语言的 Web 应用(Python/PHP等),是CGI的替代方案。

WSGI(Web Server Gateway Interface):Python专属的接口规范(仅Python)

  1. 定义
    WSGI 是Python 专属的 "接口规范"(不是网络协议,是进程内 / 本地通信的接口约定),核心目标是统一 Python Web 框架与 Web 服务器的对接方式。
  2. 背景
    Python Web 框架(Django/Flask/Tornado)和 Web 服务器(Apache/Nginx)种类繁多,如果没有统一规范,每个框架要适配所有服务器,每个服务器也要适配所有框架,成本极高。WSGI 就是为了"解耦":
  • 框架侧:只要实现 WSGI 接口,就能对接所有支持 WSGI 的服务器;
  • 服务器侧:只要实现 WSGI 接口,就能运行所有符合 WSGI 的框架。
  1. 核心特点
  • 仅适用于 Python,不是 "网络协议"(是代码层面的接口约定);
  • 定义了两个核心角色:WSGI服务器(如 Gunicorn/uWSGI)和WSGI应用(如 Django/Flask);
  • 本质是 "函数调用规范":服务器调用应用的application(environ, start_response)函数,传入请求信息,应用返回响应内容。
  1. 例子
    Flask 的核心代码就是一个符合 WSGI 的应用:
python 复制代码
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello WSGI"

# 符合WSGI规范的入口函数
def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    return [hello().encode('utf-8')]

if __name__ == '__main__':
    from wsgiref.simple_server import make_server
    server = make_server('0.0.0.0', 8000, application)
    server.serve_forever()

uwsgi:uWSGI 服务器自定义的二进制通信协议(小写,协议)

  1. 定义
    uwsgi 是uWSGI 项目专属的二进制通信协议(注意全小写),用于 Web 服务器(如 Nginx)和 uWSGI 服务器之间的通信,设计目标是 "更快、更高效"。
  2. 核心特点
  • 二进制协议(而非文本协议如 HTTP/FastCGI),传输效率更高;
  • 支持传递更多元数据(如进程状态、监控信息);
  • 仅用于 Nginx ↔ uWSGI 之间的通信,和 WSGI 规范无直接关系。

uWSGI:实现 WSGI 规范的高性能 Web 服务器(大写,软件 / 服务器)

  1. 定义
  • uWSGI 是一款开源的 Web 服务器 / 中间件(注意大写,带 "uWSGI" 标识),核心功能是:
  • 实现了 WSGI 规范(可直接运行 Django/Flask 应用);
  • 支持 uwsgi 协议、FastCGI、HTTP 等多种通信协议;
  • 提供进程池、监控、负载均衡等生产级特性。
  1. 核心定位
    作为 "中间层",一边接收 Nginx 通过 uwsgi 协议发来的请求,一边通过 WSGI 接口调用 Python 应用,是 Python Web 应用生产环境的主流部署选择。

关键区别与典型部署架构

名称 类型 适用场景 核心定位
cgi 通用协议 早期 Web 应用(已淘汰) 最基础的服务器 - 应用通信标准
fastcgi 通用协议 跨语言 Web 应用(如 PHP) CGI 的高性能升级版
wsgi python接口规范 Python Web 应用 统一 Python 框架与服务器的对接
uwsgi 二进制协议 Nginx ↔ uWSGI 通信 uWSGI 定义的高效通信协议
uWSGI web服务器 Python Web 应用部署 实现 WSGI、支持 uwsgi 协议的服务器

典型生产部署架构(Python 应用)

plaintext 复制代码
客户端浏览器 → Nginx(静态资源处理/反向代理) → uwsgi协议 → uWSGI服务器 → WSGI接口 → Django/Flask应用
  • Nginx:处理静态文件(图片 / CSS/JS)、做反向代理、负载均衡;
  • uWSGI:接收 Nginx 的请求,通过 WSGI 接口调用 Python 应用;
  • Django/Flask:业务逻辑处理,返回响应给 uWSGI,再经 Nginx 转发给客户端。