2

我最近接手了一个运行 PHP 和 Apache 的 WebServer。PHP 目前正在通过 Apache 的 mod_fastcgi 使用 PHPFPM。一切都运行良好,但是在我研究以确保我了解实现的进出时,我遇到了一个令人费解的配置。在 Apache WebServer 上,使用以下内容:

ScriptAlias /php-cgi "/usr/local/bin/php-cgi"    
AddHandler php-fastcgi .php    
Action php-fastcgi /php-cgi
FastCGIExternalServer /usr/local/bin/php-cgi -socket /tmp/php-fpm.sock -idle-timeout 60 -pass-header Authorization

现在,如前所述,上述配置工作正常。但似乎这种配置使用了两种解决方案——PHP-CGI 解决方案和 PHP-FPM 解决方案。根据我的阅读和理解,PHP-FPM 提供了 PHP-CGI 的替代品,而不是与它一起运行的东西。因此,我认为以下配置应该到位:

ScriptAlias /php-cgi "/usr/local/sbin/php-fpm"    
AddHandler php-fastcgi .php    
Action php-fastcgi /php-cgi
FastCGIExternalServer /usr/local/sbin/php-fpm -socket /tmp/php-fpm.sock -idle-timeout 60 -pass-header Authorization

第二种配置(使用 PHP-FPM)也可以。我没有注意到两者之间的任何东西,但我担心其中一个实际上是错误的。

有人愿意分享他们的想法、发现或回答应该采用哪种配置吗?当我应该运行 php-fpm 时,我不喜欢运行 php-cgi 的想法。

提前谢谢,杰森

4

1 回答 1

2

您正在查看错误的参数。在这种情况下,FastCGI 使用套接字与 PHP-FPM 进行通信。您将看到在 PHP-FPM 配置中配置的套接字。

所以重要的不是 FastCGIExternalServer 的第一个参数,而是第二个参数。第一个只是用来愚弄 Apache。

因此,处理程序发生的情况是,为 php 创建了一个处理程序,为该处理程序创建了一个动作,该路径被别名。完成后,FastCGI 可以将该路径指向一个套接字。

在 Apache 2.4 中使用 mod_proxy_fcgi 会更好。

干杯,约瑟夫

于 2013-07-17T11:38:16.557 回答