有几种不同的PHP“包装器”(?)。它们之间有什么区别?试图谷歌一些,但似乎无法找到信息。 (mod-php不可谷歌搜索)。

为什么我要选择一个呢?

#1 楼

这个问题有点奇怪,不清楚是只问PHP还是更笼统的问题。

我将从PHP的角度对它进行简要概述。

首先,这两个协议是:CGI脚本是一种在HTTP请求到达时如何运行服务器端脚本的方法;这与PHP无关。FastCGI是“更好的CGI”-众所周知CGI运行缓慢,而Fast CGI是另一种方法,效果更快。这与PHP无关。

现在与PHP有关的事情:


mod_php将PHP作为Apache模块运行-即运行了PHP请求在Apache进程中,它具有所有相关功能-Apache进程由Apache配置定义,PHP在Apache权限下运行,等等。
PHP-FPM是PHP的FastCGI实现。 PHP-FPM作为独立的FastCGI服务器运行,Apache使用Apache的模块(通常为mod_fcgid或mod_fastcgi)连接到服务器。我个人认为这比以mod_php的方式运行要好得多,但是这取决于您的要求,并且也有些复杂。在这种配置下,权限,与进程相关的内容以及所有内容都在PHP配置,PHP用户等下运行。Apache和Apache连接到服务器。在此配置中,还可能具有PHP服务器池,并且PHP服务器与Apache所在的物理不同。他们说,这几乎与使用Apache的模块一样快,并且具有更好地控制PHP配置的好处。
SuPHP-主要用于解决与权限相关的mod_php的一些问题;带有mod_php的PHP脚本在Apache用户/组下运行; mod_suphp可以在不同的用户中运行脚本;我从没使用过,PHP-FPM现在应该是更好的选择。因此,基本上,CGI,Fast-CGI是协议; CGI慢,Fast-CGI快得多
mod_php(带下划线)和PHP-FPM是运行PHP的两种基本方法
mod_SuPHP与mod_php类似,但是可以更改进程在其下运行的用户/组。


评论


也许我会澄清是什么激发了我这个问题。我刚得到一个带有ISPConfig面板(从开源面板到管理页面)的VPS。在那里,我可以为服务器/服务器端选择一个PHP版本。那些都在那里列出。因此,基本上看来,选择PHP-FPM选择了带有其他“包装器”的FastCGI吗?

–加塞克
2014年11月20日在11:22

我不知道ISPConfig面板真正使用的是什么,但是PHP以PHP-FPM的身份运行,意味着PHP将启动它自己的内置FastCGI服务器,并通过FastCGI协议监听请求。 HTTP服务器将接收来自Internet的请求,并按通常方式处理它们,并且如果需要使用PHP运行页面,则将请求FastCGI协议移交给PHP,并将结果发送回浏览器。可以将其视为位于浏览器和PHP(PHP-FPM FastCGI)服务器之间的HTTP服务器。 PHP-FPM是FastCGI协议的实现。

–AlešKrajník
2014年11月21日,0:10

@AlešKrajník感谢您的详尽解释。好吧,我一直在尝试以单独的用户/组身份运行php。因此,我从Su-exec开始,一路走到尽头,然后几个人推荐了您已经解释过的php-fpm。但是,对于模块mog_cgi,mod_cgid,mod_fastcgi,mod_fcgi以及它们如何与php-fpm一起使用仍然感到困惑。我也读过另一本教程,他们正在使用mod_fcgid和mod_proxy_fcgi。了解所有部分如何组合是多么艰难。

– David Okwii
16年11月30日在7:13

自该5.3.3或5.4.0版本以来,@ landed PHP-FPM二进制文件是每个PHP发行版的一部分(请检查此文件:php-fpm.org),以获取特定的PHP版本。

–AlešKrajník
17年5月17日下午6:13

php-fpm完全消除了初始化成本。 php-fpm会预先启动几个php进程,准备处理请求,并使它们进入睡眠状态直到请求进入-这意味着它可以比传统的cgi更快地响应,因为php在请求到达时已经在运行,而不是传统的CGI,其中每个请求都会启动一个新的php进程,而且php-fpm不会在处理请求后关闭php进程,而是继续重用相同的进程。 -启动和停止进程的开销为0,因此php-fpm响应速度更快。启动和停止过程需要时间。

– hanshenrik
17年7月22日在23:11