58

I am having issue on PHP where my app is trying to run a php backup file and suddenly getting HTTP Error 500 Code. I have checked the logs and this what it saying.

[Tue Aug 28 14:17:28 2012] [warn] [client x.x.x.x] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server, referer: http://example.com/backup/backup.php
[Tue Aug 28 14:17:28 2012] [error] [client x.x.x.x] Premature end of script headers: backup.php, referer: http://example.com/backup/backup.php

Anyone knows how to fix this? I'm really stuck in here and can't find solution in internet.

Hope anyone could share their knowledge.

Thanks. James

hakre
  • 193,403
  • 52
  • 435
  • 836
James Wise
  • 1,715
  • 4
  • 16
  • 21

18 Answers18

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>
James Wise
  • 1,715
  • 4
  • 16
  • 21
17

I had very similar errors in the Apache2 log files:

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

After checking the wrapper scripts and Apache2 settings, I realized that /var/www/ did not have accordant permissions. Thus the FCGId Wrapper scripts could not be read at all.

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

For my scenario chmod -o+rx /var/www was required of course, since the used SuExec users are not member of www-data user group - and they should not be member for security reasons of course.

Oliver Hader
  • 4,093
  • 1
  • 25
  • 47
  • 4
    I check the permission and also `FcgidBusyTimeout 3600` but again 500 – Yuseferi Jan 12 '16 at 14:23
  • Hi Oliver, I think I´m having the same problem. But I´m a newbie in linux / ubuntu. Could you give an example of the command line as to how I would set the right permissions? – Jorge Mauricio Jan 27 '21 at 07:24
5

if you want to install a PHP version < 5.3.0, you must replace

--enable-cgi

with:

--enable-fastcgi

in your ./configure statement, excerpt from the php.net doc:

--enable-fastcgi

If this is enabled, the CGI module will be built with support for FastCGI also. Available since PHP 4.3.0

As of PHP 5.3.0 this argument no longer exists and is enabled by --enable-cgi instead. After the compilation the ./php-cgi -v should look like this:

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

NOTICE THE (cgi-fcgi)

kgdesouz
  • 1,966
  • 3
  • 16
  • 21
reiner23fx
  • 51
  • 1
  • 1
4

I had this issue and realized that the file cgi-bin/php-fcgi had no execution rights.

It had 644 mode while is should have 755 mode.

Setting the correct mode was impossible (probably because the file was opened or sth), so I copied that file from another domain directory where it had proper rights already set and that fixed everything.

sEver
  • 1,948
  • 1
  • 16
  • 10
3

I had the same problem with a different and simple solution.

Problem

I installed PHP 5.6 following the accepted answer to this question on Ask Ubuntu. After using Virtualmin to switch a particular virtual server from PHP 5.5 to PHP 5.6, I received a 500 Internal Server Error and had the same entries in the 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

Cause

Simple: I didn't install the php5.6-cgi packet.

Fix

Installing the packet and reloading apache solved the problem:

  • sudo apt-get install php5.6-cgi if you are using PHP 5.6

  • sudo apt-get install php5-cgi if you are using a different PHP 5 version

  • sudo apt-get install php7.0-cgi if you are using PHP 7

Then use service apache2 reload to apply the configuration.

user5626466
  • 129
  • 4
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.

Community
  • 1
  • 1
hakre
  • 193,403
  • 52
  • 435
  • 836
  • I found that this error is getting connection timeout. I have this part in my vhost.conf (http://pastebin.com/qwbZ7wcv) and php wrapper script (http://pastebin.com/wUAeLu0u). Maybe there's wrong or missing in my configuration? – James Wise Aug 28 '12 at 07:24
  • I suggest you contact your sysadmin and clarify that with her. You also should find out how long the script takes if you execute it in a CLI environment. That won't have any PHP timeout configuration. – hakre Aug 28 '12 at 07:36
  • 1
    I managed to solved this by adding "FcgidBusyTimeout ". Just in case if anyone have similar issue with me. – James Wise Aug 30 '12 at 08:14
  • and which value of `` did you choose and for what reason? Can you share that too? Please add that [to your answer](http://stackoverflow.com/a/12192622/367456) so it's more clear for others how and why you trouble-shooted it this way. – hakre Aug 30 '12 at 08:17
  • see my answer at the above – James Wise Jun 28 '13 at 00:59
  • -1 This is not *necessarily* the case - and incorrect to say there **has** to be a syntax error to trigger this message. As an example these errors can (and most often do) happen when PHP switches from CGI to Fast-CGI mode. – Jongosi Nov 19 '15 at 11:13
  • @Jongosi: Correct, I changed the answer, it was a guess and the answer given shows that the guess was wrong. I keep it for reference in case someone looks for the error message on it's own. – hakre Nov 19 '15 at 11:36
  • I set my max_execution_time to 720, also set FcgidBusyTimeout 3600 , and in index.php I just put die('debug'); but also 500 !!!! – Yuseferi Jan 12 '16 at 14:25
  • 500 means: Take a look in the error log first (that of the service giving the 500 status back). – hakre Jan 13 '16 at 10:20
2

The famous Moodle "replace.php" script can generate this situation too. For me it was taking ages to run and then failed with a 500 message in the browser and also with the above error message in my apache error log file.

I followed up on @james-wise answer: FcgidBusy is readably described in the Apache documentation. I tried this: doubled the amount of time which apache would give my script to run, by inserting the following line in /etc/apache2/mods-available/fcgid.conf

FcgidBusyTimeout 600

Then I restarted Apache and tried to run my replace.php script again.

Fortunately this time the script instance ran to completion, so for my purposes this served as a solution.

owenmck
  • 388
  • 3
  • 9
  • I am using a go daddy Linux server. I am from a windows background. Where exactly do you add FcgidBusyTimeout? – user1051505 Jun 26 '13 at 14:12
  • Using a shared hosting service, most likely you don't have access to privileged directories such as /etc/apache2/. So that limits the usefulness of this discussion for you, I think. Google helped me find [GoDaddy guidance](http://support.godaddy.com/groups/web-hosting/forum/topic/server-500-mod_fcgid-timeout/) hth – owenmck Jun 27 '13 at 11:35
2

I came across this one while debugging a virtualmin/apache related error.

In my case, I am running virtualmin and had in my virtual machine's php.ini safe_mode=On.

In my Virtual Machine's error log, I was getting the fcgi Connection reset by peer: mod_fcgid: error reading data from FastCGI server

In my main apache error log I was getting: PHP Fatal error: Directive 'safe_mode' is no longer available in PHP in Unknown on line 0

In my case, I simply set safe_mode = Off in my php.ini and restarted apache.

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

Lance
  • 21
  • 3
2

I had the same problem with long-running scripts with the error messages "Premature end of script headers: index.php" and "Connection reset by peer: mod_fcgid: error reading data from FastCGI server" in error_log. After hours of testing this helps for me (CentOS 6, PHP-FPM 7, Plesk 12.5.30):

edit the config file:

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

Set a higher running time. In my case 600 seconds

create the new entry:

FcgidBusyTimeout 600

adapt following entries:

FcgidIOTimeout 600

FcgidConnectTimeout 600

restart httpd:

service httpd restart

joruf81
  • 21
  • 2
2

In CentOS releases suexec is compiled to run only in /var/www. If you try to set a DocumentRoot somewhere else you have to recompile it - the error in apache log are: (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server Premature end of script headers: php5.fcgi

1

Just install php5-cgi in debian

sudo apt-get install php5-cgi

in Centos

sudo yum install php5-cgi
Mancy
  • 319
  • 3
  • 5
0

Check /var/lib/php/session and its permissions. This dir should be writable by user so the session can be stored

mangia
  • 131
  • 1
  • 3
0

As already mentioned this could be happening due to fcgi handler permission issues. If you're using suexec - don't forget to check if apache has this module enabled.

kK-Storm
  • 474
  • 1
  • 4
  • 16
0

I increased max execution time to 600 seconds job done !

plesk 17 - domain effected

Petter Friberg
  • 21,252
  • 9
  • 60
  • 109
0

If you're on a shared server like me the host said it was a result of hitting memory limits, so they kill scripts which results in the "Premature end of script headers" seen in this error. They referred me to this:

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

Given an increase in memory, the issues went. I think a backup plugin Updraft on wordpress was perhaps over zealous in its duty/settings.

edindubai
  • 151
  • 1
  • 8
0

In my case I was using a custom extension for my PHP files and I had to edit /etc/apache2/conf-available/php7.2-fpm.conf and add the following code:

    <FilesMatch ".+\.YOUR_CUSTOM_EXTENSION$">
        SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
    </FilesMatch>
Otto
  • 4,020
  • 6
  • 35
  • 46
0

I've tried the majority of answers that I've found on this issue. My issue was with wp-cron.php executing a particular function.

I'm working on Plesk CentOS7, Apache server.

I used this related question and suggested answer to help me find out how to adjust the fcgid.conf memory limit utilizing the command line.

Upon trying to troubleshoot the limits on the fcgid.conf file (/etc/httpd/conf.d/fcgid.conf) and restarting apache gracefully, I found that there was no change.

After seeing that other cron jobs were running properly, I decided to refer back to my function declared in functions.php and found that some of the arguments declared were not being specified properly, so there was a loop occurring that would eventually lead to the timeout.

Upon fixing this and running the cron again, it ran as it should.

Hope this helps someone else in a similar position!

-2

I got the same problem (with Plesk 12 installed). However, when i switched from execute PHP as FastCGI to Apache Module the website worked.

Checked my suexec log:

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

When you find something like this:

[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

try this commands

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

as root.

I hope it can help you.

  • The CGI wrapper script should be owned by the correct combination of user and group the web-server is using to initiate the server process. Besides that, it's not required to completely reboot the server - `service apache2 restart` is enough to just restart the web-server.. – Oliver Hader Dec 21 '16 at 09:23