Назад | Перейти на главную страницу

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

Я пытаюсь настроить Мадсоник на моем ящике Ubuntu и запустить 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.

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