由peer重置的连接:mod_fcgid:从FastCGI服务器读取数据时出错

我在PHP的问题,我的应用程序试图运行一个PHP备份文件,突然得到HTTP错误500代码。 我已经检查了日志,这是什么意思。

[2012年8月28日14:17:28] [警告] [客户端xxxx](104)通过peer重置连接:mod_fcgid:从FastCGI服务器读取数据时出错,引用者: http : //example.com/backup/backup.php
[2012年8月28日14:17:28] [错误] [客户端xxxx]脚本标题过早结束:backup.php,referer: http : //example.com/backup/backup.php

有谁知道如何解决这个问题? 我真的被困在这里,无法在互联网上find解决scheme。

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

谢谢。 詹姆士

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

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

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

我在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用户组的成员 – 当然,他们不应该是安全的成员。

如果你想安装一个PHP版本<5.3.0,你必须replace

 --enable-cgi 

有:

 --enable-fastcgi 

在您的./configure语句中,摘自php.net文档:

 --enable-fastcgi 

如果启用了这个function,那么CGI模块也将被构build为支持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)

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

我跟着@詹姆斯明智的答案: FcgidBusy是可读的在Apache文档中描述。 我试了一下:把Apache的脚本运行时间增加了一倍,在/etc/apache2/mods-available/fcgid.conf中插入下面一行

 FcgidBusyTimeout 600 

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

幸运的是,这次脚本实例运行完成,所以对我来说这是一个解决scheme。

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

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

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

我在debugging一个virtualmin / apache相关的错误时遇到了这个。

在我的情况下,我正在运行virtualmin,并在我的虚拟机的php.ini safe_mode = On。

在我的虚拟机的错误日志中,我得到了由同级重置的fcgi连接:mod_fcgid:从FastCGI服务器读取数据时出错

在我的主要apache错误日志中,我得到:PHP致命错误:指令“safe_mode”不再可用PHP中未知的行0

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

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

不是在这个问题askers案件,但经常:

“脚本头文件过早结束”错误是什么意思?

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

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

如何解决这个问题?

如果脚本崩溃是原因,请修复脚本,使其不会崩溃。 那么这个错误也是固定的。 要找出脚本是否崩溃和为什么崩溃,您需要debugging它。 例如,你可以检查PHP错误日志。 logging到STDERR的错误通常进入FCGI的error handling程序。

对于长时间运行的脚本,error_log中的错误消息“脚本头提前结束:index.php”和“通过peer重置连接:mod_fcgid:从FastCGI服务器读取数据时出错”也遇到了同样的问题。 经过数小时的testing,这对我有帮助(CentOS 6,PHP-FPM 7,Plesk 12.5.30):

编辑configuration文件:

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

设定较高的运行时间。 在我的情况600秒

创build新条目:

FcgidBusyTimeout 600

修改以下条目:

FcgidIOTimeout 600

FcgidConnectTimeout 600

重启httpd:

服务httpd重启

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

只要在Debian中安装php5-cgi即可

  sudo apt-get install php5-cgi 

在Centos

  sudo yum安装php5-cgi 

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

如前所述,这可能是由于fcgi处理程序权限问题而发生的。 如果你使用的是suexec,不要忘了检查apache是​​否启用了这个模块。

我遇到了同样的问题(安装了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 

作为根。

我希望它可以帮助你。