Nginx: Como desativar completamente o buffer do corpo da solicitação

17

Estou tentando configurar o Madsonic na minha caixa do Ubuntu e ter o Nginx na frente dele. O problema é que continuo recebendo esse aviso quando tento fazer upload de coisas pela interface da web:

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

Isso também explica por que as barras de progresso na janela de upload não funcionam. Aqui está minha configuração relevante do 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;
    }

Estou usando o Nginx 1.9.12 no momento.

O que eu gostaria de conseguir é fazer com que o Nginx não use buffers do corpo da solicitação e apenas passe o corpo da solicitação diretamente para o Madsonic, independentemente do tamanho. Isso é possível? Se for, qual seria a configuração correta?

Outras perguntas parecem ser respondidas com maneiras de definir os tamanhos do buffer. Eu não quero nenhum amortecedor. Eu quero passar diretamente o corpo da solicitação para Madsonic.

rad
fonte
Você não pode desligá-lo. Você só pode definir o tamanho do buffer.
Michael Hampton
@MichaelHampton, mas e essa explicação?
rad
Ah, você está certo. E você respondeu sua própria pergunta, ao que parece.
Michael Hampton
@MichaelHampton bem, sim, exceto que ainda não está desligado por algum motivo :(
rad
Alguma sorte com isso? Estou tendo o mesmo problema, de acordo com a configuração de documentos proxy_request_buffering de, o truque será feito, mas ele ainda armazenará em buffer os envios.
Alejandrodnm

Respostas:

17

Eu tive o mesmo problema ao configurar um proxy Nginx para um registro do Docker. Acabei fazendo:

client_max_body_size 0;
proxy_http_version 1.1;
proxy_request_buffering off;

client_max_body_sizeainda precisava ser 0 para evitar o erro, mas watch -n 1 du -hs .mostrava claramente uma diferença. O buffer fez os dados aparecerem após a solicitação, nenhum buffer fez aparecer durante a solicitação.

proxy_http_version 1.1é necessário devido à codificação em pedaços. Citação dos documentos do Nginx:

Quando a codificação de transferência em pedaços HTTP / 1.1 é usada para enviar o corpo da solicitação original, o corpo da solicitação será armazenado em buffer, independentemente do valor da diretiva, a menos que o HTTP / 1.1 esteja habilitado para proxy.

Halfgaar
fonte