Apache FastCGI PHP中FastCgiExternalServer和FastCgiServer之间的区别



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

我在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被注释掉了。相反,我不得不使用FastCgiServer,因为否则Apache在尝试请求页面时会给我以下错误:

【2016年5月6日星期五23:25:22】【错误】【客户端::1】(2)没有这样的文件或目录:FastCGI:无法连接到服务器"/Applications/MAMP/fcgi-bin/php5.fcgi":connect()失败

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

/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起作用?

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

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

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

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

最新更新