Nginx: Jak całkowicie wyłączyć żądanie buforowania treści

17

Próbuję skonfigurować Madsonic na moim Ubuntu i uruchomić Nginx przed nim. Problem polega na tym, że ciągle otrzymuję to ostrzeżenie, gdy próbuję przesyłać rzeczy przez interfejs sieciowy:

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

To wyjaśnia również, dlaczego paski postępu w oknie przesyłania nie działają. Oto moja odpowiednia konfiguracja 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;
    }

Obecnie używam Nginx 1.9.12.

Chciałbym, aby Nginx w ogóle nie używał buforów treści żądania i po prostu przekazywał treść żądania bezpośrednio do Madsonic, niezależnie od wielkości. Czy to w ogóle możliwe? Jeśli tak, jaka byłaby poprawna konfiguracja?

Wydaje się, że na inne pytania można uzyskać odpowiedzi dotyczące sposobów ustawienia rozmiarów buforów. Nie chcę żadnych buforów. Chcę bezpośrednio przekazać treść żądania Madsonic.

rad
źródło
Nie możesz tego wyłączyć. Możesz ustawić tylko rozmiar bufora.
Michael Hampton
@MichaelHampton, ale co z tym wyjaśnieniem?
rad
Ach, masz rację. Wygląda na to, że odpowiedziałeś na własne pytanie.
Michael Hampton
@MichaelHampton dobrze, tak, ale z jakiegoś powodu nadal nie jest wyłączony :(
rad
Masz z tym szczęście? Mam ten sam problem, zgodnie z ustawieniami docs proxy_request_buffering, załatwi sprawę, ale nadal buforuje przesyłanie.
alejandrodnm

Odpowiedzi:

17

Miałem ten sam problem z konfiguracją serwera proxy Nginx dla rejestru Docker. Skończyło się na tym, że:

client_max_body_size 0;
proxy_http_version 1.1;
proxy_request_buffering off;

client_max_body_sizewciąż musiał wynosić 0, aby zapobiec błędowi, ale watch -n 1 du -hs .wyraźnie pokazał różnicę. Buforowanie spowodowało pojawienie się danych po żądaniu, brak buforowania sprawił, że pojawiły się one podczas żądania.

proxy_http_version 1.1jest konieczne z powodu kodowania fragmentarycznego. Cytat z dokumentów Nginx:

Gdy do wysłania pierwotnego treści żądania zostanie użyte kodowanie przesyłania fragmentarycznego HTTP / 1.1, treść żądania zostanie buforowana niezależnie od wartości dyrektywy, chyba że HTTP / 1.1 jest włączone dla proxy.

Halfgaar
źródło