アップストリームの応答は一時ファイルにバッファリングされます


61

私はむしろ大きくて遅い(複雑なデータ、複雑なフロントエンド)のWebアプリケーションで構築していRoRとによって提供されるPumanginxのようにリバースプロキシを。見てみるとnginx、エラーログ、私は次のようにかなりの数のエントリを参照してください。

2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file 
    /var/lib/nginx/proxy/8/47/0000038478 while reading upstream, 
    client: 5.144.169.242, server: engagement-console.foo.it, 
    request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0", 
    upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2", 
    host: "ec.reputationmonitor.it", 
    referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"

異なるユーザーや異なるユーザーインタラクションでページが同じままである可​​能性は非常に低いので、かなり興味があり、ディスク上の応答のバッファリングが必要/有用であるとは思わないでしょう。

私はproxy_max_temp_file_sizeそれを知っていて0に設定していますが、少し気まずいようです(私のプロキシはバッファリングしようとしますが、バッファリングするファイルがありません...どうすればもっと速くできますか?)

私の質問は:

  1. [警告]を削除して、応答のバッファリングを回避するにはどうすればよいですか?オフにするproxy_bufferingproxy_max_temp_file_size、0 に設定する方が良いですか?どうして?

  2. 場合nginxの応答をバッファリング:ときには、バッファへの応答、および理由を提供していますか?

  3. なぜnginxなりproxy_buffering、デフォルトでオンにし、それが実際に応答をバッファリング場合S [警告]?

  4. 応答がそのオプションをトリガーするのはいつですか?応答を提供するのに>数秒(何秒)かかりますか?これは構成可能ですか?

TIA、ngw。


1
バッファリングとキャッシュを混同しているように感じます。バッファリングは、メモリ割り当てで許可されているよりも多くのデータをロードできるようにする手順です。
スラブ

回答:


75

1)[警告]を削除し、応答のバッファリングを回避するにはどうすればよいですか?proxy_bufferingをオフにするか、proxy_max_temp_file_sizeを0に設定する方が良いでしょうか?どうして?

proxy_max_temp_file_size削除するには、0に設定する必要があります。proxy_bufferingディレクティブは、警告に直接関連はありません。スイッチをオフにしてバッファリングを停止することもできますが、一般的には推奨されません(Cometに必要な場合を除く)。

2)nginxが応答をバッファリングする場合、バッファリングされた応答をいつ、誰に、なぜ提供しますか?

サーバーはすぐにサーバーに接続しますが、クライアントは通常、接続がはるかに遅く、アプリケーションが生成するほど速く応答データを消費できません。Nginxは、アプリケーションをできるだけ早くリリースするために、応答全体をバッファリングしようとします。

参照:http : //aosabook.org/en/nginx.html

3)なぜnginxはproxy_bufferingをデフォルトでオンにし、それが実際に応答をバッファリングするかを警告しますか?

すでに述べたように、これproxy_bufferingは警告に直接関係していません。通常、最適化されたプロキシ操作に必要であり、これをオフにするとパフォーマンスとスループットが低下します。

Nginxは、設定されたメモリバッファーに応答が適合しない場合にのみ警告します。あなたが大丈夫なら、あなたは警告を無視してもよい。

4)応答がそのオプションをトリガーするのはいつですか?応答を処理するのに数秒以上かかる場合(何秒ですか?)これは構成可能ですか?

メモリバッファがいっぱいになるとトリガーします。ドキュメントを見てください、メカニズム全体が説明されています:http : //nginx.org/r/proxy_max_temp_file_size

メモリバッファを増やすことができます。


5
#1の場合、一時ファイルのサイズ制限を削除すると、バッファリングの警告はどのように防止されますか?このディレクティブを0に設定しても警告が表示されるため、これが正しいとは思わない。
フィル

パフォーマンスを設定するために、この答えは十分に明らかではない、それが優れているproxy_max_temp_file_size0か、これが唯一のその警告を削除する方法ですか?
オフィールピア

12

次の設定はサーバー上で正常に機能します。

proxy_buffers 16 16k;  
proxy_buffer_size 16k;

2
2番目のディレクティブは冗長ですか。つまり、16k1行目の行は2行目とまったく同じですか?
EoghanM

1
ドキュメントによると@EoghanM、いいえ。Proxy_Buffer_size(複数形ではなくバッファー)は、プロキシサーバーの応答の最初の部分(ヘッダー)に適用されますSets the size of the buffer used for reading the first part of the response received from the proxied server. This part usually contains a small response header。Proxy_buffersは、残りの応答用です。
CDE

2
今日あなたは私の髪の一部を救いました。私はnginxをサーバーからDockerコンテナに移動していましたが、非常に遅くなり始めました。これはそれを「修正」しました。サーバーのバージョンでデフォルトでオンになっているかどうかはわかりませんが、コンテナ内のバージョンではこれらの設定が必要でした。
クリスチャン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.