with proxy_pass - アップストリームサーバーが12MBPSでnginxサーバーにコンテンツをプッシュしますが、コンテンツを読み取るクライアントが1.2MBPS接続を使用するなど、クライアントの接続速度がアップストリームサーバーよりも遅い場合、NGINXは状況をどのように処理しますか?
location / {
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffer_size 128k;
proxy_buffers 100 128k;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://proxy.backend.server;}
この場合、Proxy_bufferingはオフになります。 Nginxは、クライアントがそのデータのポイントに到達したときに提供されるデータを保存しますか?
答え1
ドキュメントで見つけることができますproxy_buffering
:
バッファリングがディセーブルの場合、応答は受信されるとすぐにクライアントに同期的に転送されます。 nginxは、プロキシサーバーの完全な応答を読み取ろうとしません。 nginxがサーバーから一度に受信できる最大データサイズは、Proxy_buffer_sizeディレクティブによって設定されます。
つまり、NGINXはバックエンドに長時間接続されています(クライアントが応答全体をダウンロードする必要がある限り)。バッファリングがディセーブルの場合、クライアントとバックエンド間の接続は同期されます。
プロキシバッファリングをオフにするかどうかはリソースによって異なります。一般に、PHP-FPMなどのリソース不足のバックエンドの場合、クライアントが応答をダウンロードしている間にバックエンドを静止状態にすることはお勧めできません。したがって、PHP-FPMをバックエンドとして使用する場合(fastcgi_bufferingが正しいディレクティブである場合)、それを維持します。
プロキシバッファリングが無効になっていても、Proxy_buffer_sizeディレクティブなどの一部のバッファリングがまだ存在することにも注意する価値があります。紹介です正確なサイズ。タイトルのみが含まれています。 128kは(おそらく)一般的なHTMLページのサイズです。 HTTPヘッダーはこれよりはるかに小さいです。