我使用 mod_php 和 php 5.2 运行 Apache2-Prefork。
我还在 chrooted 环境中运行 php-fpm 和 php 5.3(监听 apache 可以访问的 unix 套接字)
有人可以指导我如何配置虚拟主机以使用 Fastcgi 吗?(我一直在网上搜索示例,但没有找到任何东西……)
有一点让我很困惑...
如果 php 遇到 include 或 fopen,它会在哪个上下文中执行?Apache 还是 chrooted 环境?我还可以通过 httpd.conf 和 .htaccess 传递 php 指令吗?
整个 FastCGI 对我来说仍然相当令人困惑:) 提前感谢任何帮助!
更新:我非常确定我必须使用 mod_fastcgi 和 FastCgiExternalServer 指令。但我不知道如何告诉 apache 它只能对 .php 文件执行此操作
答案1
在 Apache 虚拟主机指令中,配置一个 php5 处理程序,
AddHandler fcgid-script .php
FCGIWrapper /usr/lib/cgi-bin/php5 .php
Options ExecCGI
在该实例中,FCGIWrapper 条目是 php5 cgi 二进制文件。其他示例建议创建自己的脚本并调用该脚本,让该脚本设置选项,然后调用 php。
例如,
FCGIWrapper /usr/local/bin/php .php
如果你使用包装脚本,你可以在其中设置选项,如果你不这样做(即第一个例子),那么你可以直接在 Apache 配置文件中设置选项,
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
FcgidConnectTimeout 20
FcgidIOTimeout 60
FcgidMaxRequestsPerProcess 400
FcgidIdleTimeout 60
FcgidMinProcessesPerClass 0
</IfModule>
这就是基本的 FastCGI 配置,其中一些配置因发行版或自编译而有所不同,但以上是基本必要的内容。
似乎有相当多的常见问题解答与您的查询非常相似,
Apache + Chroot + FastCGI + PHP 常见问题解答 -http://www.seaoffire.net/fcgi-faq.html
答案2
我之前在博客上写过这篇文章,里面有完整的示例。以下是关于 Apache + PHP FPM 的部分:http://blog.foaa.de/2010/11/php-apache-and-fastcgi-a-comprehensive-overview/#implementation。
如果您向上滚动,它还涵盖了许多其他(大部分已过时的)实现 Apache + FastCGI 的方法。即使没有其他,它也可能让您更深入地了解 FastCGI 和 Apache 如何进行通信。