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

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

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

この解決策は私には効果がありません。


問題:

私はLaravel 5.1アプリケーション(他のサーバーでは問題なく稼働していた)を新しいUbuntu 14.04 サーバーアパッチ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 に再度作成するように指示し、アプリケーションの任意のルートにアクセスすると、次のログ エントリとともに「500 内部サーバー エラー」が表示されます。

[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-fcgi-yyy.yyy.yyy.yyy-80-domain.com" から不完全なヘッダー (0 バイト) を受信しました

[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-fcgi-yyy.yyy.yyy.yyy-80-domain.com" から不完全なヘッダー (0 バイト) を受信しました

私が試したこと:

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

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

同じ構成の2つの異なるサーバーで問題を再現できました。ないFastCGI を使用した Apache 2.2 を搭載した Ubuntu 12.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

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

php-cliPHP CLI はアクセラレータを使用しないため、PHP コマンドライン インターフェイス (コマンド) 経由でスクリプトを実行してみることができます。

関連情報