web-dev-qa-db-ja.com

net :: ERR_CONNECTION_RESET大きなファイルが1分以上かかる場合

PHPバックエンドのあるフォームでマルチパートファイルをアップロードしています。 php.iniのmax_execution_timemax_input_timeを180に設定し、ファイルのアップロード時にこれらの値がApacheでTimeOut 180に設定および設定されていることを確認しました。私も設定しました

RewriteRule .* - [E=noabort:1]
RewriteRule .* - [E=noconntimeout:1]

高速接続で250MBのファイルをアップロードすると、正常に機能します。より遅い接続またはネットワークリンクコンディショナーを使用して人為的に速度を落とすと、同じファイルがタイムアウトしてChromeは1分(および5秒後にnet::ERR_CONNECTION_RESET )信頼性:同じ結果の別のブラウザも試しましたが、エラーメッセージは異なります。

どのログにもエラーの兆候はなく、httphttpsの両方で試しました。

1分後にアップロード接続がリセットされる原因は何ですか?

[〜#〜] edit [〜#〜]

また、使用しているフレームワークをバイパスする単純なアップロードフォームを作成しようとしましたが、1分でタイムアウトします。

また、2分半後にタイムアウトするスリープスクリプトを作成しましたが、動作します。ページの読み込みに約2.5分かかるため、ブラウザまたはヘッダーがどのように関連しているかがわかりません。

また、より多くのRAMを含むサーバーを使用しました。これに関連しないことを確認します。仕様が異なるが、すべて同じCentOS 7ベースの3つの異なるサーバーでテストしました。

また、PHP 7.2にアップグレードし、問題の変更なしで関連フィールドを再度更新しました。

編集2この分離されたインスタンスの技術スタックは

  • Apache 2.4.6
  • PHP 5.6/7.2(両方試してみました)、OPCacheがあります
  • セッション情報とキー/値ストレージ(ElastiCache)のRedis 3.2.6
  • PostgreSQL 10.2(RDS)

私の技術スタックの他のすべては、このテスト領域から削除され、問題の特定と試行が行われました。 EFSはシステム上にありますが、私の最も孤立したテストでは、EBSを使用しています。

編集ここでchromeネットワークデバッガーからのログ:

{"params":{"net_error":-101,"os_error":32},"phase":0,"source":    {"id":274043,"type":8},"time":"3332701830","type":69},
{"params":    {"error_lib":33,"error_reason":101,"file":"../../net/socket/socket_bio_adapter.cc","line":216,"net_error":-101,"ssl_error":1},"phase":0,"source":        {"id":274043,"type":8},"time":"3332701830","type":56},
{"phase":2,"source":{"id":274038,"type":1},"time":"3332701830","type":159},
{"phase":1,"source":    {"id":274038,"type":1},"time":"3332701830","type":164},
{"phase":1,"source":    {"id":274038,"type":1},"time":"3332701830","type":287},
{"params":    {"error_lib":33,"error_reason":101,"file":"../../net/socket/socket_bio_adapter.cc","line":113,"net_error":-101,"ssl_error":1},"phase":0,"source":    {"id":274043,"type":8},"time":"3332701830","type":55},
{"params":{"net_error":-101},"phase":2,"source":    {"id":274038,"type":1},"time":"3332701830","type":287},
{"params":{"net_error":-101},"phase":2,"source":{"id":274038,"type":1},"time":"3332701830","type":164},
{"params":{"net_error":-101},"phase":2,"source":{"id":274038,"type":1},"time":"3332701830","type":97},
{"phase":1,"source":{"id":274038,"type":1},"time":"3332701830","type":105},
{"phase":2,"source":{"id":274038,"type":1},"time":"3332701830","type":105},
{"phase":2,"source":{"id":274043,"type":8},"time":"3332701830","type":38},
{"phase":2,"source":{"id":274043,"type":8},"time":"3332701830","type":38},
{"phase":2,"source":{"id":274043,"type":8},"time":"3332701830","type":34},
{"params":{"net_error":-101},"phase":2,"source":{"id":274038,"type":1},"time":"3332701830","type":2},
11
Rudiger

私は同様の問題を経験しましたが、私の場合はmod_reqtimeoutに関連していました:

RequestReadTimeout header=20-40, MinRate=500 body=20, MinRate=500

httpd.confにトリックをしました!ドキュメントを確認できます here

それが役に立てば幸い!

5
Raul

ERR_CONNECTION_RESETは通常、クライアントへの応答を送信せずにサーバーへの接続が終了したことを意味します。これは、PHPプロセス全体が適切にシャットダウンできずに終了したことを意味します。

これは通常、exceeded memory_limitのようなものが原因ではありません。何らかのセグメンテーションフォールトなどが考えられます。エラーログにアクセスできる場合は、確認してください。それ以外の場合は、ホスティング会社からサポートを受けることができます。

これらのことを試してみることをお勧めします。

1)ブラウザのキャッシュを消去してみてください。既にページにアクセスしている場合、キャッシュにWebサイトの現在のバージョンと一致しない情報が含まれている可能性があるため、接続設定がブロックされ、ERR_CONNECTION_RESETメッセージが表示されます。

2)以下を設定に追加します。

memory_limit = 1024M

max_input_vars = 2000

upload_max_filesize = 300M

post_max_size = 300M

max_execution_time = 990

3)フォームに次の入力を設定してみてください。

<input type="hidden" name="MAX_FILE_SIZE" value="300000000" /> 

4)処理スクリプトで、セッションタイムアウトを増やします。

set_time_limit(200); 

5)Apache構成ファイルでSSLバッファーサイズを調整する必要がある場合があります。

SSLRenegBufferSize 10486000

Confファイルの名前と場所は、ディストリビューションによって異なります。

Debianでは、/etc/Apache2/sites-available/default-ssl.confでconfファイルを見つけます

6)数回、それはmod_security moduleであり、約171 KBの大きなデータの投稿を防ぎます。 mod_security.confで以下を追加/変更してみてください

SecRequestBodyNoFilesLimit 10486000
SecRequestBodyInMemoryLimit 10486000

何かがうまくいくことを願っています!

4
Vikas Yadav

同じ問題がありました。インターネットが切断されてから再接続された場合、アップロードが同じ進捗から再開する再開可能なファイルアップロード方法を使用しました。

ライブラリを確認してください https://packagist.org/packages/pion/laravel-chunk-upload

  1. Installation

composer require pion/laravel-chunk-upload

  1. サービスプロバイダーを追加

\Pion\Laravel\ChunkUpload\Providers\ChunkUploadServiceProvider::class

  1. 構成を公開する

php artisan vendor:publish --provider="Pion\Laravel\ChunkUpload\Providers\ChunkUploadServiceProvider"

1
murtuza hussain

私の意見では、それらのいずれかに関連する可能性があります:

Apache config(/etc/httpd2/conf ou /etc/Apache2/conf):

Timeout 300
max_execution_time = 300

php config( 'php.ini')について:

upload_max_filesize = 2000M
post_max_size = 2000M
max_input_time = 300
memory_limit = 3092M
max_execution_time = 300

PostgreSQL config(このリクエストを実行)について:

SET statement_timeout TO 0;

proxy、(またはApache mod_proxy)については、プロキシタイムアウト設定が原因である可能性もあります。

1
A STEFANI