nginx-クライアントリクエストボディは一時ファイルにバッファリングされます


48

大きなファイルをアップロードしようとするたびに、ログファイルに次のエラーが表示されます。

a client request body is buffered to a temporary file /var/lib/nginx/body/0000000001

ファイルは正常にアップロードされますが、常に上記のエラーが表示されます。

私は増加client_body_buffer_size1000mたが、私はあることをアップロード最大のファイルを期待するものです。ただし、これは単なる推測であり、そのエラーはもう発生しませんが、これがclient_body_buffer_size?に設定する適切な値かどうか疑問に思っています。

誰もがこの指令とその使用方法に光を当てることができれば幸いです。


2
これは正常にアップロードされません。
ベン14年

回答:


51

これは警告であり、エラーではありません。それ[warn]が、ログで前書きされた理由です。

これは、アップロードされたファイルのサイズが、アップロード用に予約されたメモリ内バッファよりも大きいことを意味します。

ディレクティブclient_body_buffer_sizeは、そのバッファーのサイズを制御します。

時々ファイルをアップロードするために常に1GBのRAMを確保する余裕があるなら、それは問題ありません。アップロードをディスク上の一時ファイルではなくRAMにバッファリングするのはパフォーマンスの最適化ですが、このような大きなアップロードでは数秒余分にかかることはおそらく重要ではありません。アップロードの大部分が小さい場合は、おそらく無駄です。

最終的に、あなただけが適切なサイズが何であるかについて本当に決定することができます。


5
あなたの答えは私が決断を下すのに役立ちました。値を約512k〜1mに下げます。これらの警告の多くを受け取るのは残念です。
Abs

仮想メモリのため、大きな値を使用しても、「1GBのRAMが時々ファイルのアップロード用に予約される」ことはありません。(ノーそれは実際に現在のアップロードのために必要なのはより多くのRAMが使用されます。)
キリルBulygin

1
これを50MBに設定し、200人が同時にページを表示した場合、10GBのメモリを消費しますか、または50MBはファイルのアップロードを実行するユーザーにのみ割り当てられますか?
Codemonkey

@Codemonkeyこのバッファは、リクエスト本文がアップロードされている間のみ使用されます。アップロードが完了すると、メモリは別のリクエストに自由に使用できます。そして、他のコメント者が指摘したように、アップロードが進行中でない間、メモリは使用されません。そのため、特定の瞬間に同時にアップロードする回数に依存します。
マイケルハンプトン

多くの場合、10個、おそらく20個を超えることはありません。128GBのボックスなので、十分なメモリがあります。正直なところ、エラーログの[警告]行を削除するためだけにやろうとしています。おそらく無視する必要があります。
Codemonkey

17

NginXが本文コンテンツを一時ファイルに保存したくない場合は、設定を設定できます。このような:

    client_body_buffer_size     10M;
    client_max_body_size        10M;

この両方の構成を同じ最大値に設定した場合。サイズ(kB、MBまたはGBのそれぞれk、MまたはG)で、NginXがtempを作成するのを防ぎます。ファイル。

詳細:http : //nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size および http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size


8
しかし、その構成を使用すると、10 MiB
Josef

@Josef:決して防止しません。リクエストをディスクにバッファする必要があるだけで、警告が表示されます。受け入れられた答えを確認してください。
-OmarOthman

9
@ OmarOthman、Josefはclient_max_body_sizeパラメーターのため正しいです。このリンクに関する情報を参照してください:client_max_body_size doc。Sets the maximum allowed size of the client request body, specified in the “Content-Length” request header field. If the size in a request exceeds the configured value, the 413 (Request Entity Too Large) error is returned to the client. Please be aware that browsers cannot correctly display this error. Setting size to 0 disables checking of client request body size.
eddy85br
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.