10

nginxはリクエストをupdstreamサーバーに渡す前にバッファリングしているようですが、ほとんどの場合は問題ありませんが、私にとっては非常に悪いです:)

私の場合は次のようになります。

3つの異なるサーバーをプロキシするフロントエンドサーバーとしてnginxを使用しています:

  1. 典型的なphpアプリを備えたApache
  2. python と gevent を使用して私が構築したshabet (オープン ソースのコメット サーバー)
  3. クライアントからのアップロードを受け入れながら、ラックスペース クラウドファイルへのアップロードをプロキシする gevent で再構築されたファイル アップロード サーバー。

#3は問題です。現在私が持っているのは、nginxがすべてのリクエストをバッファリングしてから、それをファイルアップロードサーバーに送信し、ファイルアップロードサーバーが、取得した各チャンクを送信するのではなく、それをcloudfilesに送信することです(アップロードを私は6-7MB /秒をクラウドファイルにプッシュできます)。

私が nginx を使用する理由は、1 つの IP を持つ 3 つの異なるドメインを持つためです。それができない場合は、ファイルアップロード サーバーを別のマシンに移動する必要があります。

4

4 に答える 4

5

Gunicornによると、nginx を使用して実際にクライアントをバッファリングし、slowloris 攻撃を防ぐことを提案しています。したがって、このバッファリングはおそらく良いことです。ただし、提供したリンクのさらに下にオプションがあり、プロキシバッファーの削除について説明しています。これがnginx内にあるかどうかは明確ではありませんが、そうであるように見えます. もちろん、これは Gunicorn が実行されていることを前提としていますが、そうではありません。おそらく、それはまだあなたにとって役に立ちます。

編集:私はいくつかの調査を行いました.nginxでのバッファの無効化は、アウトバウンドのロングポーリングデータ用です。Nginx は、ウィキサイトで、インバウンド リクエストを上流に送信する前にバッファリングする必要があると述べています。

「HTTP プロキシ モジュールを使用する場合 (または FastCGI を使用する場合でも)、バックエンドのプロキシ サーバーに渡される前に、クライアント リクエスト全体が nginx にバッファリングされることに注意してください。その結果、アップロードの進行状況メーターが機能している場合、正しく機能しません。バックエンド サーバーによって受信されたデータを測定することによって。」

于 2012-09-05T19:30:54.947 に答える
4

バージョン nginx-1.7.11 以降、nginx で利用できるようになりました。

ドキュメント http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_request_bufferingを参照してください

アップロードのバッファリングを無効にするには、指定します

proxy_request_buffering off;
于 2015-04-23T15:28:48.880 に答える
-1

このニーズを満たすためにhaproxyを検討します。

于 2011-06-30T10:18:08.083 に答える