アプリが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
誰でもこれを修正する方法を知っていますか?私は本当にここで立ち往生していて、インターネットで解決策を見つけることができません。
誰もが知識を共有できることを願っています。
ありがとう。ジェームス
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 .
使用するSuExecユーザーはchmod -o+rx /var/www
ユーザーグループのメンバーではないため、私のシナリオではwww-data
が必要でした。もちろん、セキュリティ上の理由からメンバーではないはずです。
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)
有名なMoodle "replace.php"スクリプトもこの状況を生成できます。私にとっては、実行に時間がかかり、ブラウザで500メッセージが表示され、Apacheエラーログファイルに上記のエラーメッセージが表示されて失敗しました。
@ james-wise answer:FcgidBusy
は Apache documentation で読みやすく説明されています。私はこれを試しました:/etc/Apache2/mods-available/fcgid.confに次の行を挿入することで、Apacheがスクリプトの実行に与える時間を2倍にしました
FcgidBusyTimeout 600
次に、Apacheを再起動し、replace.phpスクリプトを再度実行しようとしました。
幸い、今回はスクリプトインスタンスが完了するまで実行されたため、私の目的ではこれが解決策となりました。
CentOSリリースでは、suexecは/ var/wwwでのみ実行されるようにコンパイルされています。 DocumentRootを別の場所に設定しようとすると、再コンパイルする必要があります。Apacheログのエラーは次のとおりです。
この質問者の場合 ではないが、多くの場合:
「スクリプトヘッダーの早すぎる終了」エラーはどういう意味ですか?
このエラーは、FCGI呼び出しが予期せず終了したことを意味します。
場合によっては、スクリプト「backup.php」がクラッシュしたことを意味します。
これを修正する方法は?
スクリプトのクラッシュが原因である場合は、クラッシュしないようにスクリプトを修正します。その後、このエラーも修正されます。スクリプトがクラッシュするifおよびwhyを見つけるには、デバッグする必要がありますそれ。たとえば、PHPエラーログを確認できます。 STDERRに記録されたエラーは、通常、FCGIのエラーハンドラーに入ります。
Virtualmin/Apache関連のエラーをデバッグしているときに、この問題に遭遇しました。
私の場合、virtualminを実行していて、仮想マシンのphp.ini safe_mode = Onで実行しています。
仮想マシンのエラーログで、ピアによってfcgi接続がリセットされていました:mod_fcgid:FastCGIサーバーからのデータ読み取りエラー
私のメインのApacheエラーログで私が得ていた:PHP致命的なエラー:ディレクティブ 'safe_mode'は行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
この問題が発生し、ファイルcgi-bin/php-fcgiには実行権限がないことがわかりました。
644モードがありますが、755モードが必要です。
正しいモードを設定することは不可能であったため(おそらくファイルが開かれた、またはsthだったため)、適切な権限が既に設定され、すべてを修正した別のドメインディレクトリからそのファイルをコピーしました。
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
次のエントリを調整します。
FcgidIOTimeout 600
FcgidConnectTimeout 600
httpdを再起動します。
サービスhttpdの再起動
Php5-cgiをdebianにインストールするだけです
Sudo apt-get install php5-cgi
centosで
Sudo yum install php5-cgi
最大実行時間を600秒に増やしました。
私は別の簡単な解決策で同じ問題を抱えていました。
buntuの質問に関するこの質問 に対する受け入れられた答えに従ってPHP 5.6をインストールしました。 Virtualminを使用して特定の仮想サーバーをPHP 5.5からPHP 5.6に切り替えた後、500内部サーバーエラーを受け取り、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
packetをインストールしませんでした。
パケットをインストールして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
を使用して構成を適用します。
/ var/lib/php/sessionとその権限を確認してください。セッションを保存できるように、このディレクトリはユーザーが書き込み可能である必要があります
すでに述べたように、これはfcgiハンドラーのアクセス許可の問題が原因で発生する可能性があります。 suexecを使用している場合-Apacheでこのモジュールが有効になっているかどうかを確認することを忘れないでください。
私の場合、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>
私のような共有サーバーを使用している場合、ホストはメモリ制限に達した結果だと言ったため、スクリプトを強制終了し、このエラーで「スクリプトヘッダーの早期終了」が発生します。彼らは私にこれを紹介しました:
メモリが増加すると、問題は解決しました。 wordpressのバックアッププラグインUpdraftは、おそらくその任務/設定が熱心だったと思います。