web-dev-qa-db-ja.com

FastCGI:「サーバーとの通信が中止されました:読み取りに失敗しました」特定の1つのファイルのみ

関連する質問: FastCGIとApache 500エラーが断続的に発生します

解決策は私にはうまくいきません。


問題:

Laravel 5.1アプリケーション(他のサーバーで問題なく本番環境にありました)を新しいbuntu14.04サーバーで実行していますApache 2.4.7およびPHPからPHP-FPM

特定のファイルがアプリケーションで呼び出されない限り、すべてが正常に機能します。

$compiledPath = __DIR__.'/cache/compiled.php';

if (file_exists($compiledPath)) {
    require $compiledPath; // this causes a "500 Internal Server Error"
}

それはLaravel特定のファイル自動的に作成されたフレームワーク自体によって少しスピードアップするためです(したがって、私のコードのバグではありません)、それは実際に存在し、私は持っていますフルアクセス許可。サイズは約600kBです。削除すると、すべて正常に機能します。ただし、Laravelに再度作成して、次のルートにアクセスするように指示すると、アプリケーションで、次のログエントリを含む「500InternalServerError」が発生します。

[fastcgi:error] [pid 14334](104)ピアによって接続がリセットされました:[client xxx.xxx.xxx.xxx:41395] FastCGI:サーバーとの通信 "/ var/www/clients/client1/web1/cgi-bin/php5-fcgi-yyy.yyy.yyy.yyy-80-domain.com "が中止されました:読み取りに失敗しました

[fastcgi:error] [pid 14334] [client xxx.xxx.xxx.xxx:41395] FastCGI:サーバー "/ var/www/clients/client1/web1/cgi-bin/php5-から受信した不完全なヘッダー(0バイト) fcgi-yyy.yyy.yyy.yyy-80-domain.com "

[fastcgi:error] [pid 14334](104)ピアによって接続がリセットされました:[client xxx.xxx.xxx.xxx:41395] FastCGI:サーバーとの通信 "/ var/www/clients/client1/web1/cgi-bin/php5-fcgi-yyy.yyy.yyy.yyy-80-domain.com "が中止されました:読み取りに失敗しました

[fastcgi:error] [pid 14334] [client xxx.xxx.xxx.xxx:41395] FastCGI:サーバー "/ var/www/clients/client1/web1/cgi-bin/php5-から受信した不完全なヘッダー(0バイト) fcgi-yyy.yyy.yyy.yyy-80-domain.com "

私が試したこと:

上記の関連する質問で解決策を試しました。これは、私が見つけたこの問題に関する他の提案のほとんどを表しています。より多くのリソースを割り当てるために、一般的なPHP-FPM設定を試してみてください。受け入れられた回答は、FastCGIを完全に放棄するオプションについても言及していますが、私はそこに行きたくありません。だから私は値をいじってみましたが、運がありませんでした。

サーバーを使用しているのは私だけなので、サーバーにまったく負荷がかからないので、利用可能なリソースの問題であるかどうかは本当に疑わしいです(12GBのRAMを搭載したVPSです)。 ファイルサイズと関係がありますか?それだけのPHPファイルが大きい).

同じ構成の2つの異なるサーバーで問題を再現できました。 FastCGIを搭載したApache2.2を搭載したUbuntu12.04サーバーでは発生しませんでした。

私の現在の構成:

PHP-FPM:

pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 0

<IfModule mod_fastcgi.c>
    ...
    Alias /php5-fcgi /var/www/....
    FastCgiExternalServer /var/www/.... -idle-timeout 300 -socket /var/lib/php5-fpm/web1.sock -pass-header Authorization
</IfModule>

php.ini

memory_limit = 512M
output_buffering = on
1
Quasdunk

PHPが特定のソースファイルでのみ失敗する場合、最も可能性の高い理由は、Xcache、APC、eAcceleratorなどの一部のPHPコードアクセラレータ(オペコードキャッシュ)に問題があることです。これは、アクセラレータまたはPHP自体のバグが原因である可能性があります。

PHPコマンドラインインターフェイス(php-cli command)as PHP CLIはアクセラレータを使用しません。

2
Marki555