PHPバックエンドのあるフォームでマルチパートファイルをアップロードしています。 php.iniのmax_execution_time
とmax_input_time
を180に設定し、ファイルのアップロード時にこれらの値がApacheでTimeOut
180に設定および設定されていることを確認しました。私も設定しました
RewriteRule .* - [E=noabort:1]
RewriteRule .* - [E=noconntimeout:1]
高速接続で250MBのファイルをアップロードすると、正常に機能します。より遅い接続またはネットワークリンクコンディショナーを使用して人為的に速度を落とすと、同じファイルがタイムアウトしてChromeは1分(および5秒後にnet::ERR_CONNECTION_RESET
)信頼性:同じ結果の別のブラウザも試しましたが、エラーメッセージは異なります。
どのログにもエラーの兆候はなく、http
とhttps
の両方で試しました。
1分後にアップロード接続がリセットされる原因は何ですか?
[〜#〜] edit [〜#〜]
また、使用しているフレームワークをバイパスする単純なアップロードフォームを作成しようとしましたが、1分でタイムアウトします。
また、2分半後にタイムアウトするスリープスクリプトを作成しましたが、動作します。ページの読み込みに約2.5分かかるため、ブラウザまたはヘッダーがどのように関連しているかがわかりません。
また、より多くのRAMを含むサーバーを使用しました。これに関連しないことを確認します。仕様が異なるが、すべて同じCentOS 7ベースの3つの異なるサーバーでテストしました。
また、PHP 7.2にアップグレードし、問題の変更なしで関連フィールドを再度更新しました。
編集2この分離されたインスタンスの技術スタックは
私の技術スタックの他のすべては、このテスト領域から削除され、問題の特定と試行が行われました。 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},
私は同様の問題を経験しましたが、私の場合はmod_reqtimeoutに関連していました:
RequestReadTimeout header=20-40, MinRate=500 body=20, MinRate=500
httpd.confにトリックをしました!ドキュメントを確認できます here 。
それが役に立てば幸い!
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
何かがうまくいくことを願っています!
同じ問題がありました。インターネットが切断されてから再接続された場合、アップロードが同じ進捗から再開する再開可能なファイルアップロード方法を使用しました。
ライブラリを確認してください https://packagist.org/packages/pion/laravel-chunk-upload
composer require pion/laravel-chunk-upload
\Pion\Laravel\ChunkUpload\Providers\ChunkUploadServiceProvider::class
php artisan vendor:publish --provider="Pion\Laravel\ChunkUpload\Providers\ChunkUploadServiceProvider"
私の意見では、それらのいずれかに関連する可能性があります:
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)については、プロキシタイムアウト設定が原因である可能性もあります。