![什么原因导致 apache2 无法通过 PHP FastCGI 处理程序运行 index.php 文件?](https://linux22.com/image/484742/%E4%BB%80%E4%B9%88%E5%8E%9F%E5%9B%A0%E5%AF%BC%E8%87%B4%20apache2%20%E6%97%A0%E6%B3%95%E9%80%9A%E8%BF%87%20PHP%20FastCGI%20%E5%A4%84%E7%90%86%E7%A8%8B%E5%BA%8F%E8%BF%90%E8%A1%8C%20index.php%20%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我正在尝试使用 FastCGI (mod-fcgid) 在 Apache 2 下使用 worker MPM 运行 PHP。我曾使用过这篇博文作为参考。
看来我一切都正常了,除了一件事:
当 apache 隐式提供 index.php 服务(我认为是使用 mod_dir)时,它不使用为 .php 文件配置的处理程序,而只是将 PHP 文件作为静态内容提供。
但是,当我手动将 index.php 部分添加到 URL 时,它确实正确使用了处理程序,并且一切似乎都正常工作。其他 PHP 文件也运行良好。
澄清:
- http://example.com/提供 PHP 源文件本身。
- http://example.com/index.php通过 FastCGI 处理程序正确运行 PHP,并提供动态内容。
这可能是什么原因造成的?任何提示都值得感激!
编辑:更多细节:这是在 Ubuntu intrepid 系统上。
我通过将两行 PHP 添加到 mods-enabled/fcgid.conf 来使 .php 在 FastCGI 中运行,因此现在看起来像:
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
IPCConnectTimeout 20
AddHandler fcgid-script .php
FCGIWrapper /usr/lib/cgi-bin/php5 .php
</IfModule>
目录索引在 mods-enabled/dir.conf 中配置:
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
我不需要将 Options +ExecCGI 放在任何地方。实际上,我只是尝试注释掉 sites-enabled/000-default 中的块,FastCGI PHP 仍然正常工作,除了隐式 index.php
答案1
噢,我太蠢了。
显然,我只是在某个时间点配置错误,并且我的浏览器缓存了错误的响应。
http://example.com/index.php然后就成功了,可能是因为我才开始尝试后我已经使 FastCGI PHP 运行,因此缓存中没有错误的响应。
换句话说,我最初的问题中的信息是 mod-fcgid 中 mpm-worker + PHP 的工作配置!
无论如何,感谢您的努力 :-)
答案2
我想知道您对 mod_index 的使用是否绕过了 fastcgi 的 vhost(即与设置使用 php 处理程序的 vhost 分开)。
答案3
这可能很愚蠢,但尝试一下:
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
IPCConnectTimeout 20
AddHandler fcgid-script .php
FCGIWrapper /usr/lib/cgi-bin/php5 .php
DirectoryIndex index.php
</IfModule>
我发现 Apache 模块以奇怪的方式交互时会出现很多怪异现象。当然,有时配置文件中的顺序非常重要。