Nginx: come disabilitare completamente il buffer del corpo della richiesta


17

Sto cercando di installare Madsonic sulla mia casella Ubuntu e far funzionare Nginx. Il problema è che continuo a ricevere questo avviso quando provo a caricare materiale tramite l'interfaccia Web:

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

Questo spiega anche perché le barre di avanzamento nella finestra di caricamento non funzionano. Ecco la mia configurazione Nginx pertinente:

    # 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;
    }

Sto usando Nginx 1.9.12 al momento.

Quello che mi piacerebbe ottenere è fare in modo che Nginx non utilizzi affatto i buffer del corpo della richiesta e passi semplicemente il corpo della richiesta direttamente a Madsonic, indipendentemente dalle dimensioni. È anche possibile? Se lo è, quale sarebbe la configurazione corretta?

Altre domande sembrano avere una risposta con i modi per impostare le dimensioni del buffer. Non voglio alcun buffer. Voglio passare direttamente il corpo della richiesta a Madsonic.


Non puoi spegnerlo. È possibile impostare solo la dimensione del buffer.
Michael Hampton

@MichaelHampton ma per quanto riguarda questa spiegazione?
rad

Ah, hai ragione. E sembra che tu abbia risposto alla tua stessa domanda.
Michael Hampton

@MichaelHampton bene, sì, tranne per il fatto che non è ancora spento per qualche motivo :(
rad

Qualche fortuna con questo? Sto riscontrando lo stesso problema in base all'impostazione dei documenti che proxy_request_buffering farà il trucco, ma continua a bufferizzare i caricamenti.
Alejandrodnm,

Risposte:


17

Ho avuto lo stesso problema durante l'impostazione di un proxy Nginx per un registro Docker. Ho finito per fare:

client_max_body_size 0;
proxy_http_version 1.1;
proxy_request_buffering off;

client_max_body_sizedoveva ancora essere 0 per prevenire l'errore, ma watch -n 1 du -hs .mostrava chiaramente una differenza. Il buffering ha fatto apparire i dati dopo la richiesta, nessun buffering ha fatto apparire durante la richiesta.

proxy_http_version 1.1è necessario a causa della codifica chunked. Citazione dai documenti di Nginx:

Quando viene utilizzata la codifica di trasferimento in blocchi HTTP / 1.1 per inviare il corpo della richiesta originale, il corpo della richiesta verrà bufferizzato indipendentemente dal valore della direttiva a meno che HTTP / 1.1 non sia abilitato per il proxy.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.