我进行了一下关于php-fpm和模块化php的调查

首先

这篇文章是一个编程新手留作备忘录的文章,我写这篇文章的目的是希望能帮助其他新手们,哪怕只是一点点好处。

这次我调查了关于php-fpm的基础部分。
在调查php-fpm时,我发现了两种存在,即模块版PHP和CGI版PHP,我也想谈谈它们。

如果有任何错误,请您指正并多多关照。

PHP-FPM(FastCGI版本的PHP)是什么?

FPM(快速CGI进程管理器)是PHP的一种FastCGI实现,它主要为高负载网站提供了有用的附加功能。php-fpm作为一个独立于Web服务器的进程,以持久化的PHP应用程序服务器形式运行。

当多个用户共享一个Web服务器时,若使用CGI版PHP运行,X先生和Y先生的程序将作为不同的用户进行执行,因此可以避免彼此之间的干扰。从这个角度来看,可以说CGI版具有较好的安全性和稳定性。

参考资料:PHP 手册 FastCGI 进程管理器(FPM)

模块化的PHP是什么意思?

这个方法是在 Web 服务器的进程中运行 PHP,更详细地说就是在 Apache 的 root 用户下运行 PHP。由于它作为 Web 服务器(Apache)的进程运行,所以在运行时不需要新建进程(应用服务器)。如果使用 Apache,可以通过添加模块(mod_php)来扮演应用服务器的角色。

当多个用户共享一个Web服务器时,如果以模块版本执行,X和Y所创建的程序将都以Apache的root用户身份运行。在这种情况下,可以说X的程序可能会干扰Y的程序的执行。

参考:PHP手册,安装为Apache模块。

由于出现了CGI和FastCGI等我不太理解的单词,所以我决定进行调查…

CGI 是什么? (CGI is what?)

通用网关接口(CGI)是一个机制,让Web服务器能够根据Web浏览器的请求来执行程序。

大致的流程是

    1. 在从web浏览器收到请求的web服务器上,通过CGI机制启动程序(不直接在web服务器上进行程序处理)。

 

    1. 程序会根据来自web浏览器发送的数据和web服务器自身拥有的数据等创建HTML文件等。

 

    随后,程序创建的内容会通过web服务器发送给web浏览器。

由于这样的机制,Web服务器可以每次发送不同的内容。

顺便提一下,被 CGI 调用的程序被称为服务器端脚本,比如 PHP、Ruby、Python 等。

参考: 网络技术的基本

然后,FastCGI是对这个CGI进行改良的。

FastCGI是什么?

虽然角色本身与CGI相同,但与CGI相比,这种机制可以提高处理速度并减轻负荷。

在CGI中,根据来自Web浏览器的请求启动的程序会在处理完毕后同时结束。如果只有一次Web浏览器的请求,就不需要考虑负载等问题,但通常情况下请求会被重复执行数百次。在这种情况下,每次请求都启动和结束程序非常低效,并增加了Web服务器的负载。

改善了这种低效且增加负担的状态的是 FastCGI。

在FastCGI中,一旦启动的程序可以在一段时间内保持在内存中的启动状态。得益于这样的机制,即使收到了上百个请求,程序的启动和结束处理也只需一次。

参考资料:FastCGI“看起来懂”但是“不明白”,也能让你觉得“明白了”的IT术语词典。

简而言之

通过使用CGI机制而不是在Web服务器上直接处理,php-fpm可以启动(作为应用服务器)并处理程序,以响应Web浏览器的请求。

在Web服务器上直接处理并根据Web浏览器的要求响应,使用Apache的扩展功能的PHP模块版。

应该选择CGI版PHP还是模块版PHP

选择CGI版本的PHP还是模块版本的PHP,我自己还没有明确的判断标准,所以无法清楚地陈述,但是根据参考网站的图表来看,

image.png

来源:boonex PHP https://www.boonex.com/trac/dolphin/raw-attachment/wiki/HostingServerSetupRecommendations/hssr-benchmark.jpg

我们已经发现,在php-fpm(FastCGI版本的PHP)和模块化版本的PHP之间,处理速度几乎没有差异。

如果只注重速度,那么我认为应选择FastCGI版PHP或模块版PHP。(实际上,我们应根据安全考虑进行适当选择。)

我认为最终应该在考虑其他特点和确定使用条件后进行选择。

最后

由于个人开发的需要,我希望重视安全性,因此我打算借此机会使用php-fpm来创建一个应用程序服务器和Web服务器,以避免以root用户管理,同时也避免干扰其他用户的程序。

我对php-fpm感到好奇,于是进行了一番调查,重新认识到编程的深奥。

我想每天都要不断进步。

文献引用

PHP手册FastCGI进程管理器(FPM)
PHP手册以Apache模块的方式安装
Web技术基础
Boonex PHP
通过理解nginx和PHP-FPM的机制,构建PHP执行环境,可以在“似乎懂了”和“其实不懂”之间找到一种假装懂了的IT术语字典。

广告
将在 10 秒后关闭
bannerAds