21

我将此添加到我的 .htaccess 文件中:

AddHandler fcgid-script .test

(我正在使用 FastCGI / VirtualMin / WebMin)

并用内容创建了一个 test.test 文件;

<?php echo "test"; ?>

这会导致内部服务器错误,并在错误日志中显示此消息:

[Thu Apr 16 14:12:57.631287 2015] [fcgid:warn] [pid 2646] (104)Connection reset by peer: [client xxxx:53595] mod_fcgid: error reading data from FastCGI server
[Thu Apr 16 14:12:57.631402 2015] [core:error] [pid 2646] [client xxxx:53595] End of script output before headers: test.test

我究竟做错了什么?我尝试使用不同的处理程序名称,例如 x-httpd-php 或 x-httpd-php5 ,但这根​​本没有任何作用。

我也试过:

<FilesMatch "\.test$">
  SetHandler fcgid-script
</FilesMatch>

但它有相同的内部服务器错误。

4

6 回答 6

7

似乎 FastCGId 模块不知道如何执行您的脚本 - FcgidWrapper指令似乎丢失了(因为您的 PHP 脚本没有Shebang)。

根据您的发行版,您必须手动设置它,或者您可以调整已经处理 .php 文件的现有指令以也处理 .test 文件(通常这应该使用“SetHandler fcgid-script”指令并设置/复制FcgidWrapper 指令)。

调整后的示例(取自https://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#examples):

<FilesMatch "\.test$">
    AddHandler fcgid-script .test
</FilesMatch>
Options +ExecCGI
FcgidWrapper /usr/bin/php5-cgi .test

更多信息和示例:https ://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#examples和http://tltech.com/info/php-on-fcgid/

其他问题可能基于权限,例如,如果您使用 suexec,fastcgid 进程无法写入日志或无法执行包装脚本。如果您能说明正常的 .php 文件是否正确执行,这将非常有帮助。

于 2015-04-19T11:39:36.103 回答
2

尝试在您的 htaccess 文件中使用它

AddType application/x-httpd-php .test

请参阅此堆栈溢出问题:在 Apache 上执行 CGI 脚本的问题

于 2015-04-20T11:05:20.280 回答
2

经过测试和验证可以工作:

因为您提到您正在使用 Webmin,所以我为 Webmin 量身定制了答案。您也可以通过 shell 编辑 Apache 的配置来做到这一点。

我会注意到通常最好编辑 Apache 的配置,在这种情况下可能是不可避免的,因为我不相信你可以在.htaccess. 虽然可能有一个我不熟悉的 hack,但服务器管理员可能希望将其锁定在 apache 配置中。在每个目录中飞来飞去的带有恶意文件扩展名的文件的想法.htaccess不仅听起来很慢,而且非常不安全。

脚步

我通过 VirtualBox 在 Ubuntu 14.04 上安装了 Apache。我添加了 Webmin 和 FastCGI。

我采取了以下步骤:

  1. 登录 Webmin,转到您的虚拟主机。
  2. 点击编辑指令
  3. 在底部添加以下内容:

<Directory />
    #Your SetHandler script here 
    #(@MrTux's script works here but NOT IN .htaccess)
    
    Require all granted
</Directory>
  1. 点击保存
  2. 点击顶部的“应用更改”。
  3. 你完成了!

我会注意到 SetHandler 传递了一些标头,因此如果您在其中声明这一点,.htaccess则有可能标头已经发送,这就是触发您的错误的原因。同样,.htaccess如果您可以控制系统,这不是设置规则的首选方式。在这种情况下,无论如何它可能会导致安全问题。

于 2015-04-26T07:44:13.723 回答
1

我不是fastcgi的人。我用谷歌搜索了这个问题。我有 2 个类似的问题发布在virtualmin. 我只是附加那里发布的答案。

https://www.virtualmin.com/node/34903

  1. 转到 virtualmin\你的虚拟服务器\服务器配置\网站选项\
  2. 选择“Apache mod_php(以 Apache 的用户身份运行)”然后保存
  3. 切换回“FCGId(以虚拟服务器所有者身份运行)”(它将要求您以域所有者身份运行 CGI 脚本)
  4. 节省

https://www.virtualmin.com/node/25539

转到 /home/sitename/fcgi-bin 使用以下命令重置不可变标志

“chattr -i php5.fcgi”

然后删除 /home/sitename/etc 和 /home/sitename/fcgi-bin 目录(确保在 etc 中与 php 无关的任何内容都已保存)使用 virtualmin 切换回 apache mod_php 模式,然后返回 FCGId 模式。该站点现在应该可以工作了不要忘记将 public_html 中的任何文件/目录 chown 为 apache 到:请注意,这些通常都是站点名称。

希望它会帮助你。

于 2015-04-20T12:46:18.193 回答
0

我质疑fcgid-script处理程序。这不是一个普通的 PHP 处理程序,即使对于 FCGI 也是如此。通常你会看到

<FilesMatch "\.test$">
     SetHandler application/x-httpd-php
</FilesMatch>

或者

<FilesMatch "\.test$">
     SetHandler php5-fcgi
</FilesMatch>

如果这些都不起作用,请检查以确保安装了 PHP FCGI。

于 2015-04-24T23:38:31.077 回答
0

所有 CGI 脚本都要求您在脚本顶部添加 Shebang 行。

因此,如果您想运行 PHP,您应该包含以下内容:

#!/path/to/php

在脚本的顶部使其工作

于 2015-04-25T14:39:52.123 回答