PHP ISAPI 和 FastCGI 比较
CGI(Common Gateway Interface,通用网关接口)
CGI(Common Gateway Interface,公共网关接口)是Web服务器与外部应用程序(CGI程序,PHP Web等)之间传递信息的接口标准。例如请求 /index.html,那么web server会去指定目录下找到这个文件(如果存在的话)发送给浏览器,这里分发的是静态数据。那么,请求的是 /index.php 的时候,根据配置文件,Nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么Nginx会把这个请求/index.php 简单处理后交给PHP解析器。CGI就是规定客户端向web server请求数据的时候,要传哪些数据、以什么样的格式传递的一种协议。
通过CGI接口,Web服务器就能够获取客户端提交的信息,并转交给服务器端的CGI程序处理,最后返回结果给客户端。一般地,我们提到的CGI实际上是实现了CGI接口标准的程序,用来处理客户请求。
CGI 程序可以用C、perl、php等来编写。
以前,web服务器(Nginx、Apache)一般只处理静态(xxx.html)的请求,如果碰到一个动态请求(jsp.index,php.index),web服务器会根据这次请求的内容,然后fork一个进程启动CGI程序,这里就是指PHP的解析器,PHP解析器程序启动后,它就会解析php.ini文件,初始化执行环境,然后解析动态脚本,再把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新的子进程启动CGI程序,周而复始的进行。启动CGI程序需要读取配置文件、加载相关扩展等,这样的工作效率非常低下。
一般是可执行程序,例如EXE文件,和WEB服务器各自占据着不同的进程,而且一个CGI程序只能处理一个用户请求。这样,当用户请求数量非常多时,会大量占用系统的资源,如内存、CPU时间等,造成效能低下。
Web服务器内置模块
由于以CGI程序处理动态请求的工作模式效率非常低(每次都要fork一个子进程来处理前端请求),因此出现了较高效的方式:Web服务器内置模块,如 Apache的mod_php模块、微软IIS的ISAPI、Nginx的php-fpm,将php解释器做成模块加载到服务器中。这样,随着服务器的启动,PHP解释器模块也会随之启动。不用像上面的那种方式每处理一个动态请求就要fork启动一次CGI程序,而是在服务器启动时,读取php配置文件,加载php模块,常驻内存中。
此外,mod_php 通过嵌入 PHP 解释器到 Apache 进程中,只能与 Apache 配合使用,而 cgi 和 fast-cgi 以独立的进程的形式出现,只要对应的Web服务器实现 cgi 或者 fast-cgi 协议,就能够处理 PHP 请求。mod_php 这种嵌入的方式最大的弊端就是内存占用大,不论是否用到 PHP 解释器都会将其加载到内存中。
可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。
传统的CGI解释器的反复加载,也是 CGI性能低下的主要原因,
如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性等。
FastCGI 特性:
1)FastCGI是一种进程管理工具,它可以在内存中管理CGI进程。
2)FastCGI就像是一个常驻(long-live)型的CGI程序,它可以一直运行着。
3)FastCGI程序也可以和Web服务器分别部署在不同的主机上,它还可以接受来自其他Web服务器的请求。
4)FastCGI也是语言无关的,其主要行为是将CGI解释器进程保持在内存中,并因此获得高效的性能。
5)FastCGI进程管理器需要单独启动。启动FastCGI后,会生成一个FastCGI主进程和多个子进程(子进程其实就是CGI解释器进程)。
# ps -ef | grep php-fpm root 1799 1 0 2020 ? 00:14:09 php-fpm: master process (/usr/local/php/etc/php-fpm.conf) www 4183 1799 0 08:46 ? 00:00:01 php-fpm: pool www www 4260 1799 0 08:46 ? 00:00:01 php-fpm: pool www www 5840 1799 0 14:52 ? 00:00:00 php-fpm: pool www www 5880 1799 0 14:52 ? 00:00:00 php-fpm: pool www www 6107 1799 0 15:12 ? 00:00:00 php-fpm: pool www www 32441 1799 0 Feb01 ? 00:00:03 php-fpm: pool www www 32701 1799 0 Feb01 ? 00:00:03 php-fpm: pool www www 32709 1799 0 Feb01 ? 00:00:03 php-fpm: pool www
6)当客户端请求Web服务器上的动态脚本(JSP、PHP)时,Web服务器会将动态脚本通过TCP协议交给FastCGI主进程,FastCGI主进程根据情况,安排一个空闲的子进程来解析动态脚本,处理完成后将结果返回给Web服务器,Web服务器再将结果返回给客户端。该客户端请求处理完毕后,FastCGI子进程并不会随之关闭,而是继续等待主进程安排工作任务。
FastCGI 原理图及运行过程:
说明:
1)Web Server启动时,载入FastCGI进程管理器(Apache PHP-Module,Nginx PHP-FPM,或IIS ISAPI等)
2)FastCGI会先启一个master,解析配置文件,初始化执行环境,然后启动多个CGI解释器进程(php-cgi,即worker),并等待来自Web Server的连接。
3)当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器(即分配给一个worker)。然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对进程的管理。
4)FastCGI子进程完成处理后,将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待,并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 (在CGI模式中,php-cgi在此便退出了)
在PHP的配置文件中,可以看到php-cgi的存在:
PHP-FPM(FastCGI Process Manager:FastCGI进程管理器)是一个实现了Fastcgi的程序,并且提供进程管理的功能,被PHP官方收了。
php-fpm就是php中的FastCGI进程管理器,进程包括master进程和worker进程。master进程只有一个,负责管理子进程(注意,这里有人认为master进程负责将客户端的请求交给worker进程处理的观点是不正确的,请见博客:php-fpm解读-进程管理的三种模式 及 worker进程、master进程详解 这篇博文中的实例,将master进程kill掉,客户端请求依旧能得到响应结果)。worker进程一般会有多个,每个进程中会嵌入一个PHP解析器,处理PHP代码。
# ps -ef | grep php-fpm root 1799 1 0 2020 ? 00:14:09 php-fpm: master process (/usr/local/php/etc/php-fpm.conf) www 4183 1799 0 08:46 ? 00:00:01 php-fpm: pool www www 4260 1799 0 08:46 ? 00:00:01 php-fpm: pool www www 5840 1799 0 14:52 ? 00:00:00 php-fpm: pool www www 5880 1799 0 14:52 ? 00:00:00 php-fpm: pool www www 6107 1799 0 15:12 ? 00:00:00 php-fpm: pool www www 32441 1799 0 Feb01 ? 00:00:03 php-fpm: pool www www 32701 1799 0 Feb01 ? 00:00:03 php-fpm: pool www www 32709 1799 0 Feb01 ? 00:00:03 php-fpm: pool www
如果在Linux上搭建Nginx和PHP环境,则需要安装PHP-FPM模块,让php以FastCGI的方式与nginx进行交互。
ISAPI ( 微软 .NET )
ISAPI(Internet Server Application Program Interface,网络服务端应用编程端口)微软提供的一套面向WEB服务的API接口,它能实现CGI提供的全部功能,并在此基础上进行了扩展,如提供了过滤器应用程序接 口。ISAPI应用大多数以DLL动态库的形式使用,可以在被用户请求后执行,,在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理别的用户输入。此外,ISAPI的DLL应用程序和WEB服务器处于同一个进程中,效率要显著高于CGI。
以 ISAPI 模式运行 PHP 的,这种方式最大的缺点就是稳定性不好,当 PHP 出错的时候,Apache进程也死掉。
FastCGI 模式运行 PHP 的优点:
首先 PHP 出错的时候不会搞垮 Apache,只是 PHP 自己的进程宕掉(但 FastCGI 会立即重新启动一个新 PHP 进程来代替当掉的进程)。
其次 FastCGI 模式运行 PHP 比 ISAPI 模式性能更好
最后,就是可以同时运行 PHP5 和 PHP4
FastCGI 模式的一些缺点:
FastCGI 模式更适合生产环境的服务器,但对于开发用机器来说就不太合适。因为当使用 Zend Studio 调试程序时,由于 FastCGI 会认为 PHP 进程超时,从而在页面返回 500 错误。
从版本 4.3.0 开始,PHP 提供了一种新类型的 SAPI(Server Application Programming Interface,服务端应用编程端口)支持,名为 CLI,意为 Command Line Interface(命令行接口)。顾名思义,该 SAPI 模块主要用作 PHP 的开发外壳应用。CLI SAPI 和其它 SAPI 模块相比有很多的不同之处。值得一提的是,CLI 和 CGI 是不同的 SAPI,尽管它们之间有很多共同的行为。
CLI SAPI 最先是随 PHP 4.2.0 版本发布的,但仍旧只是一个实验性的版本,并需要在运行 ./configure 时加上 –enable-cli 参数。从 PHP 4.3.0 版本开始,CLI SAPI 成为了正式模块,–enable-cli 参数会被默认得设置为 on,也可以用参数 –disable-cli 来屏蔽。
从 PHP 4.3.0开始,CLI/CGI 二进制执行文件的文件名、位置和是否存在会根据 PHP 在系统上的安装而不同。在默认情况下,当运行 make 时,CGI 和 CLI 都会被编译并且分别放置在 PHP 源文件目录的 sapi/cgi/php 和 sapi/cli/php 下。可以注意到两个文件都被命名为了 php。
在 make install 的过程中会发生什么取决于配置行。如果在配置的时候选择了一个 SAPI 模块,如 apxs,或者使用了 –disable-cgi 参数,则在 make install 的过程中,CLI 将被拷贝到 {PREFIX}/bin/php,除非 CGI 已经被放置在了那个位置。因此,例如,如果在配置行中有 –with–apxs,则在 make install 的过程中,CLI 将被拷贝到 {PREFIX}/bin/php。如果希望撤销 CGI 执行文件的安装,请在 make install 之后运行 make install-cli。或者,也可以在配置行中加上 –disable-cgi 参数。
以下为 CLI SAPI 和其它 SAPI 模块相比的显著区别:
1. 与 CGI SAPI 不同,其输出没有任何头信息。尽管 CGI SAPI 提供了取消 HTTP 头信息的方法,但在 CLI SAPI 中并不存在类似的方法以开启 HTTP 头信息的输出。CLI 默认以安静模式开始,但为了保证兼容性,-q 和 –no-header 参数为了向后兼容仍然保留,使得可以使用旧的 CGI 脚本。在运行时,不会把工作目录改为脚本的当前目录(可以使用 -C 和 –no-chdir 参数来兼容 CGI 模式)。出错时输出纯文本的错误信息(非 HTML 格式)。
2. CLI SAPI 强制覆盖了 php.ini 中的某些设置,因为这些设置在外壳环境下是没有意义的。
CGI / FASTCGI / ISAPI 区别
一 CGI 原理及其性能
1) CGI 概念
CGI(Common Gateway Interface,通用网关接口),它是一段程序,运行在服务器上,提供同客户端HTML页面的交互,通俗的讲CGI就象是一座桥,把网页和WEB服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。
2)CGI 程序语言
事实上,任何一种程序语言,只要能在服务器主机上利用CGI接口来编写应用程序,都可以叫作CGI程序语言。目前最为流行的CGI程序语言有四种:C,Shell,Perl,VisualBasic,其它一些语言也有许多人在用,如TCL,Fortran,AppleScript等。
3)CGI 程序的执行
CGI 程序一般是个可执行程序。编译好的CGI程序一般要集中放在一个目录下,具体存放的位置随操作系统的不同而不同。
CGI程序的执行一般有两种调用方式:
第一种是通过URL直接调用,如:“http://202.114.2.182/cgi-win /cgi.exe”,在浏览器的URL栏里直接写入上述描述就可以调用该程序;
另一种方式,也是主要的方式,是通过交互式主页里的FORM栏调用,通常都是用户在填完一张输入信息Form后按确认按钮启动CGI程序。
4)CGI工作的主要流程
CGI 工作的主要流程是:
1. 一个用户请求激活一个CGI应用程序;
2. CGI应用程序将交互主页里用户输入信息提取出来;
3. 将用户输入的信息传给服务器主机应用程序(如数据库查询〕;
4. 将服务器处理结果通过HTML文件返回给用户;
5. CGI进程结束。
5)CGI 性能评价
CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现,如DOS、WINDOWS、UNIX、OS/2、Macintosh等。实现CGI的编程语言也有很多选择。CGI的应用程序一般都是一个独立的可执行程序,和WWW服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求。这样,每有一个用户请求,都会激活一个CGI进程,当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。
二 ISAPI 原理及其性能
1)ISAPI 概念
ISAPI(Internet Server Application Program Interface),是微软提供的一套面向Internet服务的API接口,它能实现CGI能提供的全部功能,并在此基础上进行了扩展,如提供了过滤器应用程序接口。ISAPI 服务器扩展是可以被 HTTP 服务器加载和调用的 DLL。Internet 服务器扩展也称为 Internet 服务器应用程序 (ISA),用于增强符合 Internet 服务器 API (ISAPI) 的服务器的功能。ISA 通过浏览器应用程序调用,并且将相似的功能提供给通用网关接口 (CGI) 应用程序。
2)ISAPI 程序语言
由于开发ISAPI应用要用到微软的一套API,所以能用来开发ISAPI应用的语言不如CGI那么多。主要有VisualC++4.1以上版本,VisualBasic5.0、BorlandC++5.0也可以。
3)ISAPI 原理
ISAPI 的工作原理和CGI大体上是相同的,都是通过交互式主页取得用户输入信息,然后交服务器后台处理。但是二者在实现机制上大相庭径。ISAPI与CGI最大的区别在于:不同于CGI,在ISAPI下建立的应用程序是以动态连接库的形式存在;而CGI的应用程序一般都是可执行程序。
4)ISAPI 程序的执行
ISAPI 应用的工作流程与CGI有一些不同。ISAPI应用的DLL不仅可以象CGI程序一样被用户请求激活,还可以被系统预先激活来监视用户输入;对于被用户激活的DLL,在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理别的用户输入,直到过了一段时间后一直没有用户输入。
5)5ISAPI 性能评价
一个ISAPI的DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个DLL里设置多个用户请求处理函数,此外,ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。不过ISAPI的平台兼容性较差,目前只能用于微软自己的Windows95和NT操作系统上,服务器平台也仅限于 IIS(InternetInformationServer)和MSpersonalwebserver以及NTworkstation上的 peerwebserver。
6)ISAPI 筛选器是什么
ISAPI 筛选器是在启用 ISAPI 的 HTTP 服务器上运行的 DLL,用以筛选与服务器之间来回传送的数据。该筛选器注册事件的通知,例如登录或 URL 映射。当发生选定事件时,筛选器被调用,并且您可以监视及更改数据(在数据从服务器传输到客户端或相反的过程中)。可以使用 ISAPI 筛选器提供增强的 HTTP 请求记录(例如,跟踪登录到服务器的用户)、自定义加密、自定义压缩或其他身份验证方法。
7)ISAPI 服务器扩展和筛选器之间的区别是什么
服务器扩展:在 URL 中引用时运行。被显式调用,例如用 http://myserver/myprog.dll?。被用户第一次调用时根据请求加载。
筛选器:为服务器处理的每个 URL 调用。如果发生已注册事件,自动为任何发送到服务器的 URL 运行。服务因其注册表项而启动时加载。
服务器扩展和筛选器都:* 共享服务的处理空间。* 必须是线程安全的。* 一经加载便保留在内存中(直到服务停止或者内存被其他进程所需要)。
三 ISAPI与CGI有哪些相同和不同之处
ISAPI 服务器扩展为使用 Internet 服务器的通用网关接口 (CGI) 应用程序提供了另一种选择。与 CGI 应用程序不同,ISAPI 在 HTTP 服务器所在的同一地址空间运行,并且可以访问可由 HTTP 服务器使用的所有资源。ISA 的系统开销比 CGI 应用程序低,因为它们不要求创建其他进程,也不执行需要越过进程边界的通信,而这种通信非常耗时。如果内存被其他进程所需要,扩展和筛选器 DLL 都可能被卸载。
Internet客户端通过HTTP服务器调用ISAPI的方法与调用CGI应用程序的方法一样。例如,客户端可以这样调用一个 CGI 应用程序:http://sample、example.exe?Param1&Param2,它可以这样调用一个执行相同功能的 ISAPI:http://sample/example.dll?Param1&Param2。ISAPI 允许在一个DLL中有多个命令,这些命令作为DLL中CHttpServer 对象的成员函数来实现。CGI要求每个任务有一个单独的名称和一个到单独的可执行文件的URL映射。每个新的CGI请求启动一个新进程,而每个不同的请求包含在各自的可执行文件中,这些文件根据每个请求加载和卸载,因此系统开销高于ISA。
ISAPI 筛选器没有等效的 CGI 筛选器。筛选器提供预处理和后处理在客户端和服务器之间发送的所有数据的能力。
FastCGI
1. FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。
2. FastCGI 可在任何平台上使用,Netscape Enterprise 及 IIS 都有 FastCGI 的模块可供使用,阿帕契 (Apache,以及利用 Apache 衍生出做的服务器) 上也有 mod_fastcgi 可用。
3. FastCGI 支持 C/C++,Ruby, Perl,Tcl,Java,Python 等程序语言。
4. FastCGI 的应用程序亦兼容于 CGI。即 FastCGI 的应用程序也可以当成 CGI 来执行。
5. 现有的 CGI 程序要改写成 FastCGI 非常简单,最少可能只需要多加入三行程序代码。
6. FastCGI 的侦错方式与 CGI 大同小异,只要带入程序所需的环境变量及参数,即可在命令列模式执行或侦错。
7. FastCGI 应用程序的写作方式与 CGI 类似,除了几项原则要特别注意外,FastCGI 的写作方式跟 CGI 几乎一样,与学习 Web Server API 比较起来, FastCGI 简单多了。
8. FastCGI 支授分布式运算 (distributed computing),即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
PHP的FastCGI使你的所有php应用软件通过mod_fastci运行,而不是mod_phpsusexec。FastCGI应用速度很快是因为他们持久稳定。不必对每一个请求都启动和初始化。这使得应用程序的开发成为可能,否则在CGI范例是不切实际的(例如一个大型的脚本,或者一个需要连接单个或多个数据库的应用)。
好处
PHP脚本运行速度更快(3到30倍)。PHP解释程序被载入内存而不用每次需要时从存储器读取,极大的提升了依靠脚本运行的站点的性能。
需要使用更少的系统资源。由于服务器不用每次需要时都载入PHP解释程序,你可以将站点的传输速度提升很高而不必增加cpu负担。
不需要对现有的代码作任何改变。现有的一切都适用于PHP的FastCGI
潜在问题
对所有的子目录(/home/USERNAME/public_html/php.ini)你只有一个可用的php.ini文件。 这是优化网站代码所必需的。如果你需要多个php.ini文件以适应不同的脚本需要,你可以在任何子目录禁用PHP的快速CGI,而其余的地方则继续有效。如果你需要这样做请联系support。
你对PHP环境做的任何升级(如php.ini文件的改变)都有几分钟的延迟。这是因为为了更快的速度你的php.ini文件已经被载入内存,而不是每次需要时再从存储器重新读取。
IIS 6 配置PHP有CGI、ISAPI、FastCGI三种配置方式
Windows IIS 6.0下配置PHP,通常有CGI、ISAPI、FastCGI三种配置方式,这三种模式都可以在IIS 6.0下成功运行,下面我就讲一下这三种方式配置的区别和性能上的差异。
1、CGI(通用网关接口/Common Gateway Interface)一般是可执行程序,例如EXE文件,和WEB服务器各自占据着不同的进程,而且一般一个CGI程序只能处理一个用户请求。这样,当用户请求数量非常多时,会大量占用系统的资源,如内存、CPU时间等,造成效能低下。
2、ISAPI(Internet Server Application Program Interface)是微软提供的一套面向WEB服务的API接口,它能实现CGI提供的全部功能,并在此基础上进行了扩展,如提供了过滤器应用程序接口。ISAPI应用大多数以DLL动态库的形式使用,可以在被用户请求后执行,,在处理完一个用户请求后不会马上消失,而是继续驻留在内存中等待处理别的用户输入。此外,ISAPI的DLL应用程序和WEB服务器处于同一个进程中,效率要显著高于CGI。
在Windows Server 2003的IIS6下配置ISAPI方式的PHP,配置方法是,在IIS的“WEB服务扩展”中,添加一个新的WEB服务扩展,程序后缀为 PHP,ISAPI程序为php5isapi.dll,然后再“环境变量”-“系统变量”中增加变量名PHPRC,数值为php.ini的路径,在 Internet信息服务管理器中,选择网站或应用程序的根目录,打开目录属性页(右键选择“属性”),再选择“主目录”。点击“配置”按钮,选择“映射”Tab页。点击“添加…”,在“可执行文件”设为: c:\php\php5isapi.dll,扩展名设为.php,选择“确认文件是否存在”,然后“确定”保存设置。重启服务器即可完成PHP的配置。
3、FastCGI是可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。传统的CGI解释器的反复加载是 CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性等。
FastCGI已经集成于IIS7,也支持IIS6,在IIS6中的安装方法可参见微软的官方文档,我这里简单翻译一下。
先点这里下载一个32位的FastCGI extension for IIS,然后将其安装,安装后的文件应该放到system32\inetsrv目录下。
之后打开system32\inetsrv目录,执行下面的语句,其中c:\php为你的PHP目录,可以修改为其他数值。
cscript fcgiconfig.js -add -section:”PHP” -extension:php -path:”c:\php\php-cgi.exe”
在Internet信息服务管理器中,选择网站或应用程序的根目录,打开目录属性页(右键选择“属性”),再选择“主目录”。点击“配置”按钮,选择 “映射”Tab页。点击“添加…”,在“可执行文件”设为: c:\windows\system32\inetsrv\fcgiext.dll,扩展名设为.php,选择“确认文件是否存在”,然后“确定”保存设置。
修改php.ini文件,增加如下语句:
fastcgi.impersonate = 1
cgi.fix_pathinfo = 1
cgi.force_redirect = 0
之后打开system32\inetsrv目录,执行以下语句:
cscript fcgiconfig.js -set -section:”PHP” -InstanceMaxRequests:10000
cscript fcgiconfig.js -set -section:”PHP” -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000
最后,配置c:\php目录的安全性,使得IIS_WPG组对于这个目录有读取和执行的权限。
这时候,基于FastCGI的PHP就成功配置到IIS6上了。
不过根据我自己的测试,FastCGI的性能比ISAPI的好像高不了多少,不知道Windows Server 2008下的IIS7是不是会好一些。这里是微软提供的基于内置FastCGI的IIS7安装PHP的方法.
参考:
简单了解下CGI、FastCGI和php-fpm的概念和区别和运行原理
php-fpm解读-进程管理的三种模式 及 worker进程、master进程详解
CGI、FastCGI和PHP-FPM区别和关系详解(包含图解)
php的运行原理、cgi对比fastcgi以及php-cgi和php-fpm之间的联系区别
参考推荐:
LNMP(CentOS+Nginx+Mysql+PHP)服务器环境配置
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2021-02-02 16:39:36
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!