CGI(Common Gateway Interface)是早期 Web 服务器与外部程序的接口标准:每个 HTTP 请求到来,Web 服务器 fork 一个新进程运行 CGI 程序(Perl/C 脚本等),通过环境变量和标准输入传递请求数据,程序输出即响应,处理完进程退出。

被淘汰的根本原因:每请求一进程的开销太大——进程创建销毁、解释器重复加载、数据库连接无法复用,并发稍高系统就被进程管理压垮;同时每个请求都是全新的无状态环境,无法做内存缓存、连接池等优化。

替代架构

  • 模块嵌入:把语言运行时嵌入 Web 服务器进程(mod_php、mod_perl),避免进程创建。
  • FastCGI:常驻进程池 + 长连接复用,一个进程顺序处理多个请求。
  • 应用服务器内嵌 HTTP 服务:Node.js、Go 等直接自带高性能网络库,配合事件循环/I/O 多路复用单进程扛高并发;Java 的 Servlet 容器走线程池路线。
  • 反向代理分层:Nginx 处理静态与连接管理,动态请求转发给后端应用,成为现代标配。

追问方向:FastCGI 与 CGI 的具体差异、PHP-FPM 的工作模式、为什么 Go/Node 不再需要 FastCGI。