4

ThreadPool レインボー + nginx (unix ソケット) を実行しています

大きなファイルのアップロードで、nginx エラー ログに次のメッセージが表示されます (アプリケーション ログには何もありません)。

readv() failed (104: Connection reset by peer) while reading upstream

ブラウザーは応答を受け取ります。

413 Request Entity Too Large

なぜこれが起こるのですか?

  • "client_max_body_size 80M;" nginxのhttpとサーバーレベルの両方で(念のため)設定されています
  • nginx は、unix ソケット (アップストリーム ソケット + ロケーション @ proxy_pass) を介してレインボーと通信します。
  • 他のログには何も表示されません。確認しました:
    • レインボーログ
    • 職長ログ
    • アプリケーションログ
    • dmesg および /var/log/messages
  • これは、ファイルをアップロードするときに発生します ~> 1 MB サイズ
4

3 に答える 3

2

(ECONNRESETピアによる接続のリセット) エラーは、接続がバックエンド アプリケーションによって不正に閉じられたことを意味します。これは通常、セグメンテーション違反やOOM killerによって強制終了されたなどの理由で、バックエンド アプリケーションが停止した場合に発生します。正確な理由を見つけるには、バックエンド ログ (存在する場合) やシステム ログを調べる必要があります。

于 2012-10-31T16:09:26.943 に答える
1

たぶん、あなたは体のサイズを1Mbに制限するようにclient_max_body_size設定しましnginx.confた、例えば

client_max_body_size 1M;

この場合、100万を超えるファイルをアップロードできるようにするには、ファイルを削除する必要があります。

于 2012-11-02T03:40:00.513 に答える
1

Rainbows には、client_max_body_sizeデフォルトで 1 MB に設定されるという構成オプションがありました。このオプションは、ここに文書化されています。

このオプションがオンの場合、Rainbows は413大きなリクエストを黙って処理します。その前で何かを実行しない限り、壊れていることに気付かないかもしれません。

Rainbows! do
  # let nginx handle max body size
  client_max_body_size nil 
end
于 2012-11-03T01:25:37.897 に答える