Сброс соединения пиром: mod_fcgid: ошибка чтения данных с сервера FastCGI

У меня проблема с PHP, когда мое приложение пытается запустить файл резервной копии php и внезапно получает код ошибки HTTP 500. Я проверил журналы, и вот что он говорит.

[Вт, 28 августа, 14:17:28 2012] [предупреждение] [клиент xxxx] (104) Соединение сброшено узлом: mod_fcgid: ошибка чтения данных с сервера FastCGI, реферер: http://example.com/backup/backup.php
[Вторник, 28 августа, 14:17:28 2012] [ошибка] [клиент xxxx] Преждевременный конец заголовков скрипта: backup.php, referer: http://example.com/backup/backup.php

Кто-нибудь знает, как это исправить? Я действительно застрял здесь и не могу найти решение в Интернете.

Надеюсь, кто-нибудь может поделиться своими знаниями.

Спасибо. Джеймс


person James Wise    schedule 28.08.2012    source источник


Ответы (18)


Мне удалось решить эту проблему, добавив FcgidBusyTimeout. На всякий случай, если у кого-то есть аналогичная проблема со мной.

Вот мои настройки в моем apache.conf:

<VirtualHost *:80>
.......
<IfModule mod_fcgid.c>
FcgidBusyTimeout 3600
</IfModule>
</VirtualHost>
person James Wise    schedule 30.08.2012
comment
Я использую сервер Go Daddy Linux. Я из фона Windows. Где именно вы добавляете FcgidBusyTimeout? - person user1051505; 26.06.2013
comment
@ user1051505 - я добавил это в файл виртуального хоста определенного домена или в файл конфигурации apache. - person James Wise; 28.06.2013
comment
Если вы используете Plesk 12.5, вы можете добавить этот фрагмент (без первой и последней строки, части VirtualHost) в Plesk › ваш домен › Настройки Apache и nginx › Дополнительные директивы для HTTP(S). - person Marco Marsala; 17.11.2015
comment
Я добавил его для каждого виртуального хоста в основной файл конфигурации. Работает добротно. - person Parapluie; 25.08.2017
comment
мне пришлось добавить эту строку в /etc/apache2/sites-available/000-default.conf и/или /etc/apache2/sites-available/default-ssl.conf для работы - person Alphacoder; 13.10.2018
comment
Благодарность! это сработало. я добавил его в конфигурацию моего сервера httpd. - person Prasad Kumarasinghe; 26.07.2021

У меня были очень похожие ошибки в файлах журнала 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 - и, конечно, они не должны быть членами по соображениям безопасности.

person Oliver Hader    schedule 07.10.2013
comment
Проверяю разрешение и тоже FcgidBusyTimeout 3600 но опять 500 - person Yuseferi; 12.01.2016
comment
Привет, Оливер, кажется, у меня та же проблема. Но я новичок в linux/ubuntu. Не могли бы вы привести пример командной строки, как я могу установить правильные разрешения? - person Jorge Mauricio; 27.01.2021

если вы хотите установить версию 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)

person reiner23fx    schedule 09.07.2013

У меня была эта проблема, и я понял, что файл cgi-bin/php-fcgi не имеет прав на выполнение.

У него был режим 644, а должен быть режим 755.

Установить правильный режим было невозможно (возможно, потому что файл был открыт или что-то в этом роде), поэтому я скопировал этот файл из другого каталога домена, где у него уже были установлены соответствующие права, и это все исправило.

person sEver    schedule 27.09.2013


Знаменитый скрипт Moodle "replace.php" тоже может генерировать эту ситуацию. Для меня потребовались годы для запуска, а затем произошел сбой с сообщением 500 в браузере, а также с приведенным выше сообщением об ошибке в моем файле журнала ошибок apache.

Я продолжил ответ @james-wise: FcgidBusy читабельно описано в документация Apache< /а>. Я попробовал это: удвоил количество времени, которое apache даст моему скрипту для запуска, вставив следующую строку в /etc/apache2/mods-available/fcgid.conf

FcgidBusyTimeout 600

Затем я перезапустил Apache и снова попытался запустить свой скрипт replace.php.

К счастью, на этот раз экземпляр скрипта был завершен, поэтому для моих целей это послужило решением.

person owenmck    schedule 24.03.2013

Я столкнулся с этим во время отладки ошибки, связанной с virtualmin/apache.

В моем случае я запускаю virtualmin, и в моей виртуальной машине php.ini safe_mode=On.

В журнале ошибок моей виртуальной машины я получал сброс соединения fcgi пиром: mod_fcgid: ошибка чтения данных с сервера FastCGI

В моем основном журнале ошибок apache я получал: Неустранимая ошибка PHP: директива «safe_mode» больше не доступна в PHP в неизвестном в строке 0

В моем случае я просто установил safe_mode = Off в моем php.ini и перезапустил apache.

stackoverflow.com/questions/18683177/где-начать-с-устаревшей-директивой-безопасный-режим-на-линии-0-в-апаче-ошибка

person Lance    schedule 20.09.2015

Не в случае этого вопроса, но часто:

Что означает ошибка "преждевременный конец заголовков сценария"?

Эта ошибка означает, что вызов FCGI был неожиданно завершен.

В некоторых случаях это означает, что произошел сбой скрипта «backup.php».

Как это исправить?

Если причиной был сбой скрипта, исправьте скрипт, чтобы он не сбой. Тогда и эта ошибка будет исправлена. Чтобы выяснить, если и почему происходит сбой скрипта, необходимо отладить его. Например, вы можете проверить журнал ошибок PHP. Ошибки, зарегистрированные в STDERR, обычно попадают в обработчик ошибок FCGI.

person hakre    schedule 28.08.2012
comment
Я обнаружил, что эта ошибка получает тайм-аут соединения. У меня есть эта часть в моем vhost.conf (pastebin.com/qwbZ7wcv) и скрипте оболочки php (pastebin.com/wUAeLu0u). Может в моей конфигурации что-то не так или отсутствует? - person James Wise; 28.08.2012
comment
Я предлагаю вам связаться с вашим системным администратором и уточнить это у нее. Вы также должны выяснить, сколько времени занимает сценарий, если вы выполняете его в среде CLI. Это не будет иметь конфигурации тайм-аута PHP. - person hakre; 28.08.2012
comment
Мне удалось решить эту проблему, добавив FcgidBusyTimeout «время в секундах». На всякий случай, если у кого-то есть аналогичная проблема со мной. - person James Wise; 30.08.2012
comment
а какое значение <time-in-seconds> вы выбрали и по какой причине? Можете ли вы поделиться этим тоже? Пожалуйста, добавьте это в свой ответ, чтобы другим было более понятно, как и почему вы устранили неполадки таким образом. - person hakre; 30.08.2012
comment
посмотри мой ответ выше - person James Wise; 28.06.2013
comment
-1 Это не обязательно так, и неправильно говорить, что должна быть синтаксическая ошибка, чтобы вызвать это сообщение. Например, эти ошибки могут (и чаще всего случаются) возникать, когда PHP переключается из режима CGI в режим Fast-CGI. - person Jongosi; 19.11.2015
comment
@Jongosi: Правильно, я изменил ответ, это было предположение, и данный ответ показывает, что предположение было неверным. Я храню его для справки на случай, если кто-то ищет сообщение об ошибке самостоятельно. - person hakre; 19.11.2015
comment
Я установил для своего max_execution_time значение 720, также установил FcgidBusyTimeout 3600 и в index.php просто поставил die('debug'); но и 500!!!! - person Yuseferi; 12.01.2016
comment
500 означает: сначала загляните в журнал ошибок (тот сервис, который возвращает статус 500). - person hakre; 13.01.2016

У меня была такая же проблема с длительными скриптами с сообщениями об ошибках «Преждевременное завершение заголовков скриптов: index.php» и «Сброс соединения одноранговым узлом: mod_fcgid: ошибка чтения данных с сервера FastCGI» в error_log. После нескольких часов тестирования это помогло мне (CentOS 6, PHP-FPM 7, Plesk 12.5.30):

отредактируйте файл конфигурации:

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

Установите большее время работы. В моем случае 600 секунд

создайте новую запись:

FcgidBusyTimeout 600

адаптировать следующие записи:

FcgidIOTimeout 600

Фкгидконнекттимеаут 600

перезапустить httpd:

перезапуск службы httpd

person joruf81    schedule 14.02.2016

В выпусках CentOS suexec скомпилирован для работы только в /var/www. Если вы попытаетесь установить DocumentRoot в другом месте, вам придется перекомпилировать его - ошибка в журнале apache: (104) Сброс соединения пиром: mod_fcgid: ошибка чтения данных с сервера FastCGI Преждевременный конец заголовков скрипта: php5.fcgi

person Jivko Todorov    schedule 01.02.2017

Просто установите php5-cgi в Debian

sudo apt-get install php5-cgi

в Сентос

sudo yum install php5-cgi
person Mancy    schedule 19.10.2013
comment
Пакет php5-cgi недоступен - person ZurabWeb; 07.04.2015

Проверьте /var/lib/php/session и его разрешения. Этот каталог должен быть доступен для записи пользователем, чтобы сеанс мог быть сохранен.

person mangia    schedule 30.12.2013

Как уже упоминалось, это может происходить из-за проблем с разрешениями обработчика fcgi. Если вы используете suexec - не забудьте проверить, включен ли в apache этот модуль.

person kK-Storm    schedule 20.06.2014

Я увеличил максимальное время выполнения до 600 секунд. Работа выполнена!

plesk 17 – действие домена

person Stephen Murray    schedule 04.01.2018

Если вы находитесь на общем сервере, как и я, хост сказал, что это было результатом превышения лимита памяти, поэтому они убивают сценарии, что приводит к «преждевременному концу заголовков сценариев», наблюдаемому в этой ошибке. Они направили меня к этому:

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

С учетом увеличения памяти вопросы пошли. Я думаю, что плагин резервного копирования Updraft на WordPress, возможно, слишком усердствовал в своих обязанностях/настройках.

person edindubai    schedule 09.03.2019

В моем случае я использовал собственное расширение для своих файлов 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>
person Novo    schedule 11.03.2019

Я пробовал большинство ответов, которые я нашел по этому вопросу. Моя проблема заключалась в том, что wp-cron.php выполнял определенную функцию.

Я работаю над Plesk CentOS7, сервером Apache.

Я использовал этот связанный вопрос и предлагаемый ответ, чтобы помочь мне узнать, как настроить ограничение памяти fcgid.conf с помощью командной строки.

При попытке устранить ограничения в файле fcgid.conf (/etc/httpd/conf.d/fcgid.conf) и изящном перезапуске apache я обнаружил, что изменений нет.

Увидев, что другие задания cron выполняются правильно, я решил вернуться к своей функции, объявленной в functions.php, и обнаружил, что некоторые из объявленных аргументов не были указаны должным образом, поэтому возник цикл, который в конечном итоге привел к тайм-ауту.

После исправления этого и повторного запуска cron все заработало как надо.

Надеюсь, это поможет кому-то еще в аналогичном положении!

person Gary Torrence    schedule 17.06.2021

У меня такая же проблема (с установленным 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

как корень.

Я надеюсь, что это может помочь вам.

person Marvin M    schedule 23.03.2015
comment
Сценарий оболочки CGI должен принадлежать правильной комбинации пользователя и группы, которую веб-сервер использует для запуска серверного процесса. Кроме того, полностью перезагружать сервер не требуется - достаточно service apache2 restart просто перезапустить веб-сервер. - person Oliver Hader; 21.12.2016