之间的差异和优缺点:Fast-CGI,CGI,Mod-PHP,SuPHP,PHP-FPM


73

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

我为什么要选择一个呢?

Answers:


141

这个问题有点奇怪,不清楚是只问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用户等下运行。在这种配置下,还可能具有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吗?
Gacek

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

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

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

2
php-fpm完全消除了初始化费用。php-fpm预启动了几个php进程,准备处理请求,并使它们进入睡眠状态直到请求进入-这意味着它可以比传统的cgi更快地响应,因为与传统的CGI相比,当请求到达时php已经在运行,其中每个请求都会启动一个新的php进程,而且php-fpm不会在处理请求后关闭php进程,而是继续重用相同的进程。-启动和停止进程的开销为0,因此php-fpm响应速度更快。启动和停止过程需要时间。
hanshenrik
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.