ファイルサイズが50MB程のCSVファイルのアップロードを失敗してしまう(Nginx, Next.js)
[構成]
・Ubuntu 22.04
・Nginx 1.18.0-6
・Node.js v18.18.2
・Next.js v9.8.1でのAPI処理
・MySQL v8.0.35-0へのデータ取り込み
【ご質問】
以下のようにエラーの確認と対処を行ったのですが、まだエラーが残っています。
これは何を対処すれば良いでしょうか?
【補足】
ご回答頂ける際に、ランサーズでランサーをされている方は是非お知らせください。
(参考)ChatGPT4による回答
エラー3に関しては、Nginxとアップストリーム(この場合は127.0.0.1:5000)の間で通信の問題が発生している可能性があります。
このエラーはTCPリセット中、TCP接続のタイムアウトやアップストリームサーバの処理速度などが原因で起きることがあります。
このエラーの原因と対処は以下の通りです:
-
アップストリームサーバーのパフォーマンス問題:
アップストリームサーバー(この場合は、http://127.0.0.1:5000 )が遅すぎてレスポンスを処理できない場合、
Nginxからアップストリームサーバーへの要求がタイムアウトする可能性があります。
この場合、アップストリームサーバのパフォーマンスを改善する必要があります。 -
ネットワーク接続の問題:Nginxとアップストリームサーバーとの間のネットワーク接続に問題がある場合にも
同様のエラーが発生します。接続を確認して、その問題点を特定し、修正します。 -
Nginx設定の変更とチューニング:Nginxの設定を変更し、タイムアウトなどのパラメータを調整することで、
この問題を解決することができる場合があります。
たとえば、次のような設定を試すことができます:
/etc/nginx/nginx.conf:
http {
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
proxy_buffers 8 16k;
proxy_buffer_size 32k;
}
それぞれの値は環境によって調整が必要かもしれません。
これらの設定値の詳細について理解するためには、Nginxの公式ドキュメンテーションを参照することをオススメします。
最後に、Nginxの設定を変更したら systemctl restart nginx または相当のコマンドで
Nginxを再起動して変更内容を適用します。
確認したエラーログの場所
/var/log/nginx/error.log
エラー内容と対処(1)
- エラー(1)
[error] 796#796: *356 client intended to send too large body: 51230246 bytes, client: [IPアドレス], server: , request: "POST /api/upload HTTP/1.1", host: "[IPアドレス]", referrer: "http://[IPアドレス]/"
- 対処(1)
参考にした資料:(Qiita)【Nginx】エラー「client intended to send too large body:」の対処法
編集したファイル:/etc/nginx/sites-enabled/defaultserver { client_max_body_size 100M; }
エラー内容と対処(2)
- エラー(2)
[error] 3127#3127: *1 upstream timed out (110: Unknown error) while sending request to upstream, client: [IPアドレス], server: , request: "POST /api/upload HTTP/1.1", upstream: "http://127.0.0.1:5000/api/upload", host: "[IPアドレス]", referrer: "http://[IPアドレス]/"
- 対処(2)
参考にした資料:(IT分からんわ~_~;様)nginxのタイムアウト時間を伸ばす
編集したファイル:/etc/nginx/sites-enabled/defaultserver { proxy_read_timeout 600; proxy_connect_timeout 600; proxy_send_timeout 600; }
エラー内容(3)→ 未解決
- エラー(3)
[error] 795#795: *123 readv() failed (104: Unknown error) while reading upstream, client: [IPアドレス], server: , request: "POST /api/upload HTTP/1.1", upstream: "http://127.0.0.1:5000/api/upload", host: "[IPアドレス]", referrer: "http://[IPアドレ ス]/