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 应用开发者专注业务逻辑。
演进逻辑
- 纯静态时代:Web 服务直接返回 HTML/CSS/图片等静态文件
- 动态请求诞生:用户需要交互(付款、查询等),Web 服务需调用外部脚本(Perl 等)处理业务
- CGI 协议:封装 HTTP 协议细节,让 Web 应用开发者无需处理复杂的 HTTP 协议
- FastCGI:解决 CGI 每次请求创建/销毁进程的性能问题,成为长驻型 CGI
- 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-FPM | uWSGI / Daphne |
| 与 Web 应用通信协议 | FastCGI | WSGI / ASGI |
| 与 Nginx 通信协议 | FastCGI | uWSGI / HTTP |
| 能否独立充当 Web 服务 | 否 | uWSGI 可以(支持 HTTP) |
Nginx 三大转发指令
| 指令 | 协议 | 目标服务 |
|---|---|---|
proxy_pass | HTTP/HTTPS | 上游 HTTP 服务器(含 uWSGI 的 HTTP 模式) |
fastcgi_pass | FastCGI | PHP-FPM |
uwsgi_pass | uWSGI | uWSGI 服务器(推荐) |
参见
- Web 应用架构基础 — 核心概念详解
- PHP 体系架构 — PHP-FPM / FastCGI
- Python 体系架构 — WSGI / ASGI / uWSGI / Daphne
- 架构对比总结 — PHP vs Python
- Nginx — Web 服务器 / 反向代理