【问题标题】:Difference between FastCgiExternalServer and FastCgiServer in Apache FastCGI PHP?Apache FastCGI PHP 中 FastCgiExternalServer 和 FastCgiServer 的区别?
【发布时间】:2016-09-02 02:19:51
【问题描述】:

请允许我声明我是 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() 失败

[Fri May 06 23:25:22 2016] [error] [client ::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 起作用?

【问题讨论】:

  • 如果你在 2016 年做 PHP fastcgi,看看 mod_proxy_fcgi 和 php-fpm 而不是 mod_fastcgi。

标签: php apache fastcgi mod-fastcgi


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 为了获得更好的性能使用 nginx 而不是 apache(看 google:nginx apache performance)。
    • @KamilKiełczewski 推测 Nginx 的性能优势并非全面准确。对于静态内容,是的,但不是动态内容,它们大致等效。谷歌搜索的一个示例页面:hostingadvice.com/how-to/nginx-vs-apache
    • @jeffmcneill 但未来的网络方向是静态客户端(例如在 Angular2 上构建),用于生成动态页面内容(客户端是静态纯 JS+HTML+CSS 文件,加载后所有动态都在浏览器端开始这个静态文件并运行 JS)并且客户端仅通过 RESTfull 请求(json、ajax)与后端通信 - 所以静态性能非常重要 :) 所以在 MVC 模型中,M 在后端,VC 在前端 :)跨度>
    • @KamilKiełczewski 是的,静态很重要,我没有说别的,这也是 Nginx 有优势的地方,但动态部分 Nginx 并没有提供更好的性能。零件的顺序无关紧要。如果需要客户进行所有动态操作,那么您将把所有东西都运送给客户,这可能是一部动力不足的智能手机。除了最简单的应用程序之外,对于许多/大多数配置来说都是不明智的。
    猜你喜欢
    • 2013-10-26
    • 2011-05-30
    • 2012-02-09
    • 2019-04-03
    • 2012-06-03
    • 2015-11-22
    • 1970-01-01
    • 2014-06-18
    • 2011-02-17
    相关资源
    最近更新 更多