为什么 php-fpm 要使用 php-cgi 包装脚本?(使用 virtualhost 和 suexec。)

为什么 php-fpm 要使用 php-cgi 包装脚本?(使用 virtualhost 和 suexec。)

我刚刚用 Apache、FastCGI 和 PHP-FPM 设置了我的服务器。我的问题是关于 /cgi-bin/ 文件夹的:是否真的有必要为每个使用不同用户/组运行 apache 的虚拟主机设置一个 /cgi-bin/php-fpm 包装器?此外,如果用户删除 cgi-bin 文件夹... fpm/fastcgi 的好处就会消失。理想情况下,我希望设置 PHP-FPM,而不需要 .conf 文件之外的任何东西。

据我所知,php-cgi 二进制文件(php-fpm 包装器执行的全部内容)可由系统上的所有用户执行...那么为什么要费力地包装用户将要运行的相同可执行文件呢?更具体地说,如何更改此配置以直接使用 php-cgi 二进制文件,而不是通过包装器?

与我的问题相关的文件/结果是:

/etc/apache2/modules.d/20_mod_fpm.conf
---------------------------------------------------------------------------------
...

FastCgiExternalServer /var/www/localhost/cgi-bin/php-fpm -host 127.0.0.1:9000

添加处理程序 php-fpm.php
操作 php-fpm /cgi-bin/php-fpm

目录索引 index.php

...
在/var/www/localhost/cgi-bin/php-fpm
---------------------------------------------------------------------------------
/usr/bin/php-cgi 的版本
phpinfo()
---------------------------------------------------------------------------------
...
服务器 API:FPM/FastCGI
...

太棒了。运行基准测试报告显示,该设置确实运行良好:每秒约 135 个请求,而使用默认 Apache/PHP 解释器设置时每秒仅 13 个请求。因此,剩下的就是让多用户方面变得无缝衔接。

答案1

例如,在 Redhat/centos 机器上,php-fpm 实际上是 /usr/sbin/ 目录中的二进制文件。它拦截来自服务器(apache/nginx)的调用以处理 php 请求。php-fpm 的设置可以在 php-fpm.conf 中调整(http://php-fpm.org/wiki/Configuration_File),它可以让您微调您的系统。php-fpm 相当先进,可以让您对系统进行很多控制。

不知何故,您系统上的 php-fpm 文件似乎更像是普通的 fastcgi/cgi 包装器。如果您想绕过使用“您的 php-fpm 版本”并直接使用 php-cgi,则可以使用自定义 fastcgi 包装器。自定义 fastcgi 包装器的示例如下:

#!/bin/bash
### Set PATH ###
PHP_CGI=/usr/bin/php-cgi
PHP_FCGI_MAX_REQUESTS=1000
export PHP_FCGI_MAX_REQUESTS
exec $PHP_CGI

php-fpm.conf 中可以设置的选项之一是允许您以其他用户身份执行 php 脚本。Suexec 也提供此功能,Apache 可以调用它将请求传递给将处理 php 文件的 fastcgi 包装器。suexec + fastcgi 共同提供了 php-fpm 的一些关键功能,因此可以用作替代方案。

答案2

使用包装器允许您选择进行其他配置,例如设置环境变量、选择 php.ini 文件等。

相关内容