Nginx: как полностью отключить буферизацию тела запроса

17

Я пытаюсь настроить Madsonic на своем Ubuntu box и запустить Nginx перед ним. Проблема в том, что я продолжаю получать это предупреждение при попытке загрузить материал через веб-интерфейс:

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 хорошо, да, за исключением того, что он все еще не выключен по некоторым причинам :(
рад
Удачи с этим? У меня та же проблема в соответствии с настройкой документации, proxy_request_buffering of сделает свое дело, но она все еще буферизует загрузки.
alejandrodnm

Ответы:

17

У меня была такая же проблема при настройке прокси Nginx для реестра Docker. Я закончил тем, что сделал:

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 не включен для прокси.

Halfgaar
источник