55

我在 PHP 上遇到问题,我的应用程序尝试运行 php 备份文件并突然收到 HTTP 错误 500 代码。我检查了日志,这就是它所说的。

[Tue Aug 28 14:17:28 2012] [warn] [client xxxx] (104) Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: http://example.com/backup/backup.php
[2012 年 8 月 28 日星期二 14:17:28] [错误] [客户端 xxxx] 脚本头过早结束:backup.php,引用者:http ://example.com/backup/backup.php

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

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

谢谢。詹姆士

4

18 回答 18

32

I managed to solved this by adding FcgidBusyTimeout . Just in case if anyone have similar issue with me.

Here is my settings on my apache.conf:

<VirtualHost *:80>
.......
<IfModule mod_fcgid.c>
FcgidBusyTimeout 3600
</IfModule>
</VirtualHost>
于 2012-08-30T08:15:34.640 回答
16

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

于 2013-10-07T09:53:57.683 回答
5

如果要安装 PHP 版本 < 5.3.0,则必须替换

--enable-cgi

和:

--enable-fastcgi

在您的./configure声明中,摘自 php.net 文档:

--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)

于 2013-07-09T17:04:34.350 回答
4

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

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

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

于 2013-09-27T08:06:21.630 回答
3

我用不同的简单解决方案遇到了同样的问题。

问题

我在 Ask Ubuntu 上接受了这个问题的答案后安装了 PHP 5.6 。在使用 Virtualmin 将特定虚拟服务器从 PHP 5.5 切换到 PHP 5.6 后,我收到了 500 Internal Server Error 并且在 apache 错误日志中有相同的条目:

[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应用​​配置。

于 2018-07-03T14:36:13.180 回答
2

Not in this questions askers case but often:

What does the "premature end of script headers" error mean?

That error means that the FCGI call was exited unexpectedly.

In some cases it means that the script "backup.php" did crash.

How to fix this?

If the crash of a script was the cause, fix the script so that it does not crash. Then this error is fixed, too. To find out if and why a script crashes, you need to debug it. For example you can check the PHP error log. Errors logged to STDERR normally go into the error handler of the FCGI.

于 2012-08-28T06:34:04.280 回答
2

著名的 Moodle "replace.php" 脚本也可以产生这种情况。对我来说,它需要很长时间才能运行,然后在浏览器中出现 500 条消息并且在我的 apache 错误日志文件中出现上述错误消息。

我跟进了@james-wise 的回答: 在Apache 文档FcgidBusy中有可读的描述。我试过这个:通过在 /etc/apache2/mods-available/fcgid.conf 中插入以下行,将 apache 给我的脚本运行的时间加倍

FcgidBusyTimeout 600

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

幸运的是,这次脚本实例运行完成,因此出于我的目的,这是一个解决方案。

于 2013-03-24T03:14:10.723 回答
2

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

编辑配置文件:

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

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

创建新条目:

FcgidBusyTimeout 600

调整以下条目:

FcgidIO超时 600

FcgidConnectTimeout 600

重启httpd:

服务 httpd 重启

于 2016-02-14T13:16:56.607 回答
2

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

就我而言,我正在运行 virtualmin 并在我的虚拟机的 php.ini 中设置了 safe_mode=On。

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

在我的主要 apache 错误日志中,我得到: PHP Fatal error: Directive 'safe_mode' is no longer available in PHP in Unknown on line 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

于 2015-09-20T11:48:29.320 回答
2

在 CentOS 发行版中,suexec 被编译为仅在 /var/www 中运行。如果您尝试在其他地方设置 DocumentRoot,则必须重新编译它 - apache 日志中的错误是:(104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server Premature end of script headers: php5.fcgi

于 2017-02-01T08:31:01.197 回答
1

只需在 debian 中安装 php5-cgi

sudo apt-get install php5-cgi

在 Centos

须藤百胜安装php5-cgi
于 2013-10-19T21:22:09.313 回答
0

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

于 2013-12-30T11:04:43.050 回答
0

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

于 2014-06-20T16:34:23.997 回答
0

如果您在像我这样的共享服务器上,主机说这是达到内存限制的结果,因此他们会杀死脚本,从而导致在此错误中看到“脚本头过早结束”。他们向我推荐了这个:

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

考虑到内存的增加,问题就解决了。我认为 wordpress 上的备份插件 Updraft 可能在其职责/设置方面过于热情。

于 2019-03-09T20:24:57.227 回答
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>
于 2019-03-11T13:50:50.360 回答
0

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

我正在开发 Plesk CentOS7,Apache 服务器。

我使用了这个相关的问题和建议的答案来帮助我了解如何使用命令行调整 fcgid.conf 内存限制。

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

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

修复此问题并再次运行 cron 后,它按应有的方式运行。

希望这可以帮助处于类似位置的其他人!

于 2021-06-17T22:08:05.243 回答
0

我将最大执行时间增加到 600 秒完成!

plesk 17 - 受域影响

于 2018-01-04T16:56:56.837 回答
-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

作为根。

我希望它可以帮助你。

于 2015-03-23T11:13:07.517 回答