Nginx:要求本文のバッファリングを完全に無効にする方法


17

UbuntuボックスにMadsonicをセットアップして、その前でNginxを実行しようとしています。問題は、Webインターフェースを介してコンテンツをアップロードしようとすると、この警告が引き続き表示されることです。

31115#0: *14 a client request body is buffered to a temporary file

また、アップロードウィンドウの進行状況バーが機能しない理由も説明します。関連するNginxの構成は次のとおりです。

    # proxy the madsonic server here
    location / {
            proxy_pass                      https://madsonic-server/;
            proxy_redirect                  off;
            proxy_buffering                 off;
            proxy_request_buffering         off;
            allow                           all;
            proxy_http_version              1.1;

            proxy_set_header                Host $http_host;
            proxy_set_header                X-Real-IP $remote_addr;
            proxy_set_header                X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header                X-Forwarded-Host $server_name;
            proxy_set_header                X-Forwarded-Proto $scheme;

            client_body_buffer_size         0;
            client_max_body_size            0;
            proxy_max_temp_file_size        0;
            proxy_read_timeout              18000;
            proxy_send_timeout              18000;

            gzip                            off;
    }

現在、Nginx 1.9.12を使用しています。

私が達成したいのは、Nginxがリクエストボディバッファをまったく使用せず、リクエストボディをサイズに関係なくMadsonicに直接渡すことです。これも可能ですか?もしそうなら、正しい構成は何でしょうか?

他の質問には、バッファサイズを設定する方法で回答が得られるようです。バッファーは必要ありません。リクエストの本文をMadsonicに直接渡したいです。


オフにすることはできません。バッファサイズのみ設定できます。
マイケルハンプトン

@MichaelHamptonしかし、この説明はどうですか?
ラド

ああ、あなたは正しい。そして、あなたはあなた自身の質問に答えたようです。
マイケルハンプトン

@MichaelHamptonええ、はい、それはまだ何らかの理由でオフになっていないことを除いて:(
rad

これで幸運ですか?docsのproxy_request_bufferingの設定によると同じ問題を抱えていますが、それでもアップロードをバッファリングします。
-alejandrodnm

回答:


17

DockerレジストリにNginxプロキシを設定するのと同じ問題がありました。私はやったこと:

client_max_body_size 0;
proxy_http_version 1.1;
proxy_request_buffering off;

client_max_body_sizeエラーを防ぐために0のままにする必要がありましたが、watch -n 1 du -hs .明らかに違いが示されました。バッファリングにより、リクエスト後にデータが表示され、リクエスト中にバッファリングが表示されることはありませんでした。

proxy_http_version 1.1チャンクエンコーディングのために必要です。Nginxドキュメントからの引用:

HTTP / 1.1チャンク転送エンコーディングを使用して元の要求本文を送信する場合、HTTP / 1.1がプロキシに対して有効になっていない限り、要求値に関係なく要求本文はバッファリングされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.