9

让我声明一下我是 FastCGI 的新手。我的 OS X 机器上有 MAMP 的 Apache。默认 PHP 处理程序是Apache Handler 2.0(libphp5.so)。我想更改FastCGI并遵循此处的答案:如何配置 Apache 以通过终端在 Ubuntu 12.04 上将 PHP 作为 FastCGI 运行?

我在 httpd.conf 的末尾添加了以下内容:

<IfModule mod_fastcgi.c>
   AddHandler php5.fcgi .php
   Action php5.fcgi /php5.fcgi
   Alias /php5.fcgi /Applications/MAMP/fcgi-bin/php5.fcgi
   FastCgiServer /Applications/MAMP/fcgi-bin/php5.fcgi -socket /Applications/MAMP/tmp/php-fcgi/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
   #FastCgiExternalServer /Applications/MAMP/fcgi-bin/php5.fcgi -socket /Applications/MAMP/tmp/php-fcgi/php5-fpm.sock -pass-header Authorization -idle-timeout 3600
   <Directory /Applications/MAMP/fcgi-bin>
       Order allow,deny
         Allow from all
   </Directory> 
</IfModule>

但是,如您所见,FastCgiExternalServer被注释掉了。相反,我必须使用FastCgiServercause 否则 Apache 在尝试请求页面时给我以下错误:

[Fri May 06 23:25:22 2016] [error] [client ::1] (2)No such file or directory: FastCGI: failed to connect to server "/Applications/MAMP/fcgi-bin/php5.fcgi" : 连接失败

[2016 年 5 月 6 日星期五 23:25:22] [错误] [客户端 ::1] FastCGI:从服务器“/Applications/MAMP/fcgi-bin/php5.fcgi”收到不完整的标头(0 字节)

但是/Applications/MAMP/fcgi-bin/php5.fcgi存在,其内容是:

#!/bin/bash
PHP_CGI=/Applications/MAMP/bin/php/php5.6.2/bin/php-cgi
exec $PHP_CGI

FastCgiServerFastCgiExternalServer为什么FastCgiExternalServer在我的情况下不起作用但起作用之间有什么区别FastCgiServer

4

2 回答 2

14

FastCgiServer 是 mod_fastcgi 将对其进行进程管理的服务器——上下旋转实例并为它们提供一个 unix 域套接字以进行侦听。启动 fastcgi 服务器不需要任何外部操作。

FastCgiExternalServer 是一个 mod_fastcgi 不会对其进行任何进程管理的服务器——它只会访问你告诉它使用的 unix 或 TCP 套接字并将请求/响应转发给它。您或 httpd 之外的某个守护进程必须启动某些东西以在列出的套接字上进行侦听。最基本的方法是“fcgistarter”实用程序,其他选项是 php-fpm。

于 2016-07-06T13:26:15.740 回答
1

如果性能是原因,我会说使用带有 fcgid 的 Apache。这被认为对性能更好。为了处理性能,mod_fcgid 启动多个 CGI 程序实例来处理并发请求。对于 PHP 开发人员,这是 mod_php 的替代方案,可提供更高的性能。我发现这篇文章是很好的学习资源

http://2bits.com/articles/apache-fcgid-acceptable-performance-and-better-resource-utilization.html

于 2016-07-11T19:07:15.890 回答