FastCgiExternalServer 和 Apache FastCGI 中的 FastCgiServer 的区别 PHP?
Difference between FastCgiExternalServer and FastCgiServer in Apache FastCGI PHP?
声明一下,我是 FastCGI 的新手。我的 OS X 机器上安装了 MAMP 的 Apache。默认 PHP 处理程序是 Apache Handler 2.0
(libphp5.so)。我想更改为 FastCGI
并遵循此处的答案:How to configure Apache to run PHP as FastCGI on Ubuntu 12.04 via terminal?
我在 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 在尝试请求页面时会给我以下错误:
[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": connect() failed
[Fri May 06 23:25:22 2016] [error] [client ::1] FastCGI: incomplete headers (0 bytes) received from server "/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
FastCgiServer
和 FastCgiExternalServer
之间有什么区别,为什么 FastCgiExternalServer
在我的案例中不起作用,但 FastCgiServer
有效?
FastCgiServer 是一个服务器,mod_fastcgi 将对其进行进程管理 -- 上下旋转实例并为它们提供一个 unix 域套接字来侦听。启动 fastcgi 服务器不需要外部操作。
FastCgiExternalServer 是一个 mod_fastcgi 不会对其进行任何进程管理的服务器 -- 它只会到达您告诉它使用的 unix 或 TCP 套接字并转发 requests/responses 给它。你,或者 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
声明一下,我是 FastCGI 的新手。我的 OS X 机器上安装了 MAMP 的 Apache。默认 PHP 处理程序是 Apache Handler 2.0
(libphp5.so)。我想更改为 FastCGI
并遵循此处的答案:How to configure Apache to run PHP as FastCGI on Ubuntu 12.04 via terminal?
我在 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 在尝试请求页面时会给我以下错误:
[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": connect() failed
[Fri May 06 23:25:22 2016] [error] [client ::1] FastCGI: incomplete headers (0 bytes) received from server "/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
FastCgiServer
和 FastCgiExternalServer
之间有什么区别,为什么 FastCgiExternalServer
在我的案例中不起作用,但 FastCgiServer
有效?
FastCgiServer 是一个服务器,mod_fastcgi 将对其进行进程管理 -- 上下旋转实例并为它们提供一个 unix 域套接字来侦听。启动 fastcgi 服务器不需要外部操作。
FastCgiExternalServer 是一个 mod_fastcgi 不会对其进行任何进程管理的服务器 -- 它只会到达您告诉它使用的 unix 或 TCP 套接字并转发 requests/responses 给它。你,或者 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