CGI、FastCGI、PHP-FPM、WSGI、ASGI、uWSGI 架构

来源:Egon 林海峰(@egonlin.com) 原文标题:一文彻底讲明白 CGI、FastCGI、php-fpm、wsgi、uwsgi、agi

核心脉络

文章从 Web 程序的本质出发,沿着「静态 → 动态 → 协议标准化 → 语言体系分化」的演进路线,系统梳理了 Web 服务与 Web 应用之间通信协议的发展史。

Web 程序基本构成

Web程序 = Web服务 + Web应用
  ├─ Web服务:处理 HTTP 协议、解析请求、匹配路径
  └─ Web应用:执行业务逻辑、生成动态内容

这种分层架构的核心价值在于分工协作——Web 服务开发者专注 HTTP 协议处理,Web 应用开发者专注业务逻辑。

演进逻辑

  1. 纯静态时代:Web 服务直接返回 HTML/CSS/图片等静态文件
  2. 动态请求诞生:用户需要交互(付款、查询等),Web 服务需调用外部脚本(Perl 等)处理业务
  3. CGI 协议:封装 HTTP 协议细节,让 Web 应用开发者无需处理复杂的 HTTP 协议
  4. FastCGI:解决 CGI 每次请求创建/销毁进程的性能问题,成为长驻型 CGI
  5. Web 框架:在 Web 应用内部进一步封装协议处理,让开发者专注业务逻辑

PHP 体系

  • PHP-FPM = FastCGI 进程管理器(Master-Worker 模型)
  • 只支持 FastCGI 协议,不能直接充当 Web 服务
  • 必须搭配 Nginx/Apache 使用
  • Nginx 通过 fastcgi_pass 指令转发 FastCGI 请求

Python 体系

  • WSGI:Python 专用的 Web 服务网关接口(同步)
  • ASGI:WSGI 的异步版本,支持 WebSocket/HTTP2/长连接
  • uWSGI 服务器:与 Python 应用之间用 WSGI 协议;与 Nginx 之间用 uWSGI 协议(更高效)
  • Daphne 服务器:ASGI 协议的实现;与 Nginx 之间用 HTTP 协议

关键对比

特性PHP 体系Python 体系
应用管理器PHP-FPMuWSGI / Daphne
与 Web 应用通信协议FastCGIWSGI / ASGI
与 Nginx 通信协议FastCGIuWSGI / HTTP
能否独立充当 Web 服务uWSGI 可以(支持 HTTP)

Nginx 三大转发指令

指令协议目标服务
proxy_passHTTP/HTTPS上游 HTTP 服务器(含 uWSGI 的 HTTP 模式)
fastcgi_passFastCGIPHP-FPM
uwsgi_passuWSGIuWSGI 服务器(推荐)

参见