Nginx: Як повністю відключити запит на отримання буферизації


17

Я намагаюся налаштувати Madsonic на свій 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.


Ви не можете вимкнути його. Ви можете встановити лише розмір буфера.
Майкл Хемптон

@MichaelHampton, але що з цим поясненням?
рад

Ах, ти маєш рацію. І ти відповів на власне запитання, схоже.
Майкл Хемптон

@MichaelHampton добре, так, за винятком того, що це все-таки не вимкнено чомусь :(
rad

Пощастило з цим? У мене виникають ті ж проблеми відповідно до налаштування документів 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 не включено для проксі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.