CGI + FastCGI(PHP-FPM)联系与区别 【图解 + 注释】

〇、背景


参考了几篇文章,总结成 图解 + 注释 方便以后查阅。

参考资料:
1、https://www.zhihu.com/question/19582041
2、https://segmentfault.com/q/1010000000256516

一、CGI


1、什么是 CGI

CGI(Common Gateway Interface,通用网关接口),是服务器与程序(或脚本)进行通信的接口。CGI 使程序员能够编写自己的动态 Web 应用程序。

2、原理

CGI 采用的是“fork-and-execute”的工作模式。即:

2021-04-06-22-24-49

对一个 CGI 程序,做的工作其实只有:从环境变量(environment variables)和标准输入(standard input)中读取数据、处理数据、向标准输出(standard output)输出数据。

1、环境变量 中存储的叫 Request Meta-Variables,也就是诸如 QUERY_STRING、PATH_INFO 之类的东西,这些是由 Web Server 通过环境变量传递给 CGI 程序的,CGI 程序也是从环境变量中读取的。

2、标准输入 中存放的往往是用户通过 PUTS 或者 POST 提交的数据,这些数据也是由 Web Server 传过来的。

3、优缺点

优点:设计简单
缺点:效率低下,每个请求都需要fork一个新的CGI进程去处理。

二、FastCGI(PHP-FPM)


1、什么是 FastCGI

FastCGI(快速通用网关接口),是CGI的增强版本。其目的在于,减少Web服务器与CGI程序之间交互的开销,使得服务器可以同时处理更多的请求。

2、原理

与 CGI 的 “fork-and-execute” 工作模式不同,FastCGI 是 “master-worker” 工作模式。像是一个常驻型的 CGI(守护进程),可以通过配置多个进程,来处理一连串的请求。

2021-04-06-22-24-58

注:

  • PHP-FPM 是 FastCGI 协议 的一个实现
  • 自 PHP 5.3版,PHP 内置 了PHP-FPM

    使用 --enalbe-fpm 这个编译参数

3、优缺点

优点:提高服务器的性能
缺点:比较耗费资源

4、注意事项

(1)关于平滑重启

修改 php.ini 之后,php-cgi 进程的确是没办法平滑重启的。php-fpm 对此的处理机制是新的 worker 用新的配置,已经存在的 worker 处理完手上的活就可以歇着了,通过这种机制来平滑过度。

三、[拓展] WSGI


WSGI 也是一种基于 CGI ,跟 FastCGI 类似的规范,专用于 python 领域。

参考我的另一篇文章:《Dash by Plotly 学习笔记》

posted @ 2017-09-12 19:21  小蒋不素小蒋  阅读(527)  评论(0编辑  收藏  举报

ICP证:沪ICP备20014317号