通过对等方重置连接:mod_fcgid:从FastCGI服务器读取数据时出错

时间:2012-08-28 05:59:45

标签: php apache mod-fcgid

我在PHP上遇到问题我的应用程序试图运行php备份文件并突然收到HTTP Error 500 Code。我已经检查了日志,这就是它的含义。

  

[Tue Aug 28 14:17:28 2012] [warn] [client x.x.x.x](104)通过对等方重置连接:mod_fcgid:从FastCGI服务器读取数据时出错,引用:http://example.com/backup/backup.php
  [Tue Aug 28 14:17:28 2012] [error] [client x.x.x.x]脚本标题过早结束:backup.php,referer:http://example.com/backup/backup.php

任何人都知道如何解决这个问题?我真的被困在这里,无法在互联网上找到解决方案。

希望任何人都能分享他们的知识。

感谢。 詹姆斯

18 个答案:

答案 0 :(得分:26)

我设法通过添加 FcgidBusyTimeout 解决了这个问题。万一有人和我有类似的问题。

这是我在apache.conf上的设置:

<VirtualHost *:80>
.......
<IfModule mod_fcgid.c>
FcgidBusyTimeout 3600
</IfModule>
</VirtualHost>

答案 1 :(得分:11)

我在Apache2日志文件中遇到了非常类似的错误:

(104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
Premature end of script headers: phpinfo.php

检查包装器脚本和Apache2设置后,我意识到/ var / www /没有一致的权限。因此,根本无法读取FCGId Wrapper脚本。

ls -la /var/www
drwxrws---  5 www-data     www-data     4096 Oct  7 11:17 .

对于我的方案当然需要chmod -o+rx /var/www,因为使用过的SuExec用户不是www-data用户组的成员 - 当然,出于安全原因,他们不应该是成员。

答案 2 :(得分:4)

如果你想安装PHP版本&lt; 5.3.0,你必须替换

--enable-cgi

使用:

--enable-fastcgi

在你的./configure声明中,摘自php.net doc:

--enable-fastcgi

如果启用此功能,CGI模块也将构建为支持FastCGI。自PHP 4.3.0起可用

从PHP 5.3.0开始,此参数不再存在,并由--enable-cgi启用。编译后,./php-cgi -v应如下所示:

PHP 5.2.17 (cgi-fcgi) (built: Jul  9 2013 18:28:12)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

通知(cgi-fcgi)

答案 3 :(得分:2)

着名的Moodle“replace.php”脚本也会产生这种情况。 对我来说,运行时间很长,然后在浏览器中显示500条消息失败,并在我的apache错误日志文件中显示上述错误消息。

我跟着@詹姆斯明智的回答: FcgidBusy中可以读到FcgidBusyTimeout 600 。我试过这个:通过在/etc/apache2/mods-available/fcgid.conf中插入以下行,将apache给我的脚本运行的时间增加了一倍

{{1}}

然后我重新启动Apache并尝试再次运行我的replace.php脚本。

幸运的是,这次脚本实例运行完成,所以出于我的目的,这可以作为解决方案。

答案 4 :(得分:2)

我遇到了这个问题并意识到文件cgi-bin / php-fcgi没有执行权。

它有644模式,而应该有755模式。

设置正确的模式是不可能的(可能是因为文件被打开了或者是sth),所以我从另一个已经设置了适当权限的域目录中复制了该文件并修复了所有内容。

答案 5 :(得分:2)

不在this questions askers case但经常:

  

“脚本标题的过早结束”错误是什么意思?

该错误意味着FCGI呼叫意外退出。

在某些情况下,这意味着脚本“backup.php”确实崩溃了。

  

如何解决这个问题?

如果脚本崩溃是原因,请修复脚本以使其不会崩溃。那么这个错误也是固定的。要查找 if 脚本崩溃的原因,您需要对其进行调试。例如,您可以检查PHP错误日志。记录到STDERR的错误通常会进入FCGI的错误处理程序。

答案 6 :(得分:2)

我在调试virtualmin / apache相关错误时遇到了这个问题。

在我的情况下,我正在运行virtualmin并且已经在我的虚拟机中运行了php.ini safe_mode设置=开。

在我的虚拟机错误日志中,我通过对等方重置了fcgi连接:mod_fcgid:从FastCGI服务器读取数据时出错

在我的主要apache错误日志中,我得到了: PHP致命错误:指令&#39; safe_mode&#39;在第0行的Unknown中不再提供PHP

在我的情况下,我只是在我的php.ini中设置safe_mode = Off并重新启动apache。

stackoverflow.com/questions/18683177/where-to-start-with-deprecated-directive-safe-mode-on-line-0-in-apache-error

答案 7 :(得分:2)

对于长时运行的脚本以及错误消息,我遇到了同样的问题 &#34;脚本标题的过早结束:index.php&#34; &#34;由对等方重置连接:mod_fcgid:从FastCGI服务器读取数据时出错&#34;在error_log中。 经过数小时的测试后,这对我有帮助(CentOS 6,PHP-FPM 7,Plesk 12.5.30):

编辑配置文件:

  
    

/etc/httpd/conf.d/fcgid.conf

  

设置更长的运行时间。在我的情况下600秒

创建新条目:

  
    

FcgidBusyTimeout 600

  

调整以下条目:

  
    

FcgidIOTimeout 600

         

FcgidConnectTimeout 600

  

重启httpd:

  
    

service httpd restart

  

答案 8 :(得分:2)

在CentOS版本中,suexec被编译为仅在/ var / www中运行。如果您尝试在其他地方设置DocumentRoot,则必须重新编译它 - apache日志中的错误是: (104)通过对等方重置连接:mod_fcgid:从FastCGI服务器读取数据时出错 脚本标题的提前结束:php5.fcgi

答案 9 :(得分:1)

只需安装php5-cgi即可 在debian

sudo apt-get install php5-cgi

在Centos中

sudo yum install php5-cgi

答案 10 :(得分:1)

我将最长执行时间增加到600秒完成作业!

plesk 17 - domain effected

答案 11 :(得分:1)

我有一个简单而又不同的解决方案。

问题

我按照可接受的this question on Ask Ubuntu答案安装了PHP 5.6。 使用Virtualmin将特定的虚拟服务器从PHP 5.5切换到PHP 5.6之后,我收到500 Internal Server Error,并在apache error log中具有相同的条目:

[Tue Jul 03 16:15:22.131051 2018] [fcgid:warn] [pid 24262] (104)Connection reset by peer: [client 10.20.30.40:23700] mod_fcgid: error reading data from FastCGI server
[Tue Jul 03 16:15:22.131101 2018] [core:error] [pid 24262] [client 10.20.30.40:23700] End of script output before headers: index.php

原因

简单:我没有安装php5.6-cgi数据包

修复

安装数据包并重新加载apache解决了问题:

  • sudo apt-get install php5.6-cgi(如果您使用的是 PHP 5.6

  • sudo apt-get install php5-cgi(如果您使用的是不同的PHP 5版本

  • sudo apt-get install php7.0-cgi(如果您使用的是 PHP 7

然后使用service apache2 reload应用配置。

答案 12 :(得分:0)

我已经尝试了我在这个问题上找到的大多数答案。我的问题是 wp-cron.php 执行特定功能。

我在 Plesk CentOS7、Apache 服务器上工作。

我使用 this related question and suggested answer 来帮助我了解如何使用命令行调整 fcgid.conf 内存限制。

在尝试对 fcgid.conf 文件 (/etc/httpd/conf.d/fcgid.conf) 的限制进行故障排除并正常重启 apache 后,我发现没有任何变化。

在看到其他 cron 作业正常运行后,我决定回顾我在 functions.php 中声明的函数,发现声明的某些参数没有正确指定,因此发生了循环最终导致超时。

修复此问题并再次运行 cron 后,它按原样运行。

希望这能帮助处于类似情况的其他人!

答案 13 :(得分:0)

在我的情况下,我正在为PHP文件使用自定义扩展名,因此我必须编辑/etc/apache2/conf-available/php7.2-fpm.conf并添加以下代码:

    <FilesMatch ".+\.YOUR_CUSTOM_EXTENSION$">
        SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
    </FilesMatch>

答案 14 :(得分:0)

如果您在像我这样的共享服务器上,主机会说这是由于达到内存限制所致,因此它们会杀死脚本,从而导致此错误中出现“脚本头过早结束”。他们向我介绍了这一点:

https://help.dreamhost.com/hc/en-us/articles/216540488-Why-did-procwatch-kill-processes-on-my-Shared-serv

鉴于内存增加,问题解决了。我认为Wordpress上的备用插件Updraft的职责/设置可能过于热情了。

答案 15 :(得分:0)

如前所述,由于fcgi处理程序权限问题,可能会发生这种情况。如果你正在使用suexec - 请不要忘记检查apache是​​否启用了此模块。

答案 16 :(得分:0)

检查/ var / lib / php / session及其权限。该目录应该是用户可写的,因此可以存储会话

答案 17 :(得分:-2)

我遇到了同样的问题(安装了Plesk 12)。 但是,当我从执行PHP作为FastCGI切换到Apache模块时,网站运行起来了。

检查了我的suexec日志:

$ cd /var/log/apache2/
$ less suexec.log

当你发现这样的事情时:

[2015-03-22 10:49:00]: directory is writable by others: (/var/www/cgi-bin/cgi_wrapper)
[2015-03-22 10:49:05]: uid: (10004/gb) gid: (1005/1005) cmd: cgi_wrapper

尝试此命令

$ chown root:root /var/www/cgi-bin/cgi_wrapper
$ chmod 755 /var/www/cgi-bin/cgi_wrapper
$ shutdown -r now

以root身份。

我希望它可以帮到你。