PHP CGI FastCGI php-fpm 解惑
web服务器exec这样一个进程,然后交给他一些输入参数,他就慢慢的处理完后把结果返回给web服务器,那从协议层面来说cgi协议就是规范了web服务器和cgi程序的一些输入输出参数的含义。
CGI(Common Gateway Interface)是1993年由美国国家超级电脑应用中心(NCSA)为 NCSA HTTPd Web 服务器开发的。这个 Web 服务器使用了 UNIX shell 环境变量 来保存从 Web 服务器传递出去的参数,然后生成一个运行 CGI 的独立进程。CGI的第一个实现是 Perl 写的,但是 CGI 有如下问题:
- 效率低下:每一个连接 fork 一个进程处理。
- 功能十分有限:CGI只能收到一个请求,输出一个响应。
所以就有了Apache的mod_php,FastCGI(Fast Common Gateway Interface)
FastCGI使用进程/线程池来处理一连串的请求。这些进程/线程由FastCGI服务器管理,而不是Web服务器。 当进来一个请求时,Web服务器把环境变量和这个页面请求通过一个Socket长连接传递给FastCGI进程。所以FastCGI有如下的优点:
- 性能:通过进程/线程池规避了CGI开辟新的进程的开销。
- 兼容:非常容易改造现有CGI标准的程序。
- 语言无关:FastCGI是一套标准,理论上讲只要能进行标准输出(stdout)的语言都可以作为FastCGI标准的Web后端。
5.phpfpm是php对fastcgi的一种具体实现,它的启动后会创建多个cgi子进程,然后主进程负责管理子进程,同时它对外提供一个socket,那web服务器当要转发一个动态请求时只需要按照fastcgi协议要求的格式将数据发往这个socket的就可以了,那phpfpm创建的子进程去争抢这个socket连接,谁抢到了谁处理并将结果返回给web服务器,那phpfpm主进程干什么了?比方说其中一个子进程异常退出了怎么办,那phpfpm会去监控他一旦发现一个cgi子进程就会又启动一个,还有其他诸多管理功能
6 phpfpm作为一个独立的进程存在 通过socket与nginx建立连接,而mod_php 是作为一个模块被加载进了apache服务器,同时他们两作为cgi调度管理器,他们对其管理的方式也不一样
上一篇: PHP怎么修改键名
推荐阅读
-
Web服务器和动态语言如何交互--CGI&FastCGI&FPM浅谈,web服务器交互--cgi_PHP教程
-
CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI 模式对比
-
概念了解:CGI,FastCGI,PHP
-
PHP7内核CGI与FastCGI详解
-
处理(php-cgi.exe - FastCGI 进程超过了配置的请求超时时限)的问题
-
PHP面试:简述CGI、FastCGI和PHP-FPM的区别
-
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
-
cgi、fastcgi及php-fpm分别是什么
-
php环境配置之CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI比较?
-
php提供的sapi有哪些?CGI、FastCGI、php-fpm、php-cgi解释