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

Я пытаюсь настроить 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.

2 ответа

У меня была такая же проблема при настройке прокси 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 не включен для прокси.

Я использую эту область для отключения буферизации прокси

      proxy_buffering                 off;
Другие вопросы по тегам