Nginx: Como desabilitar completamente a solicitação de buffer do corpo

11

Estou tentando configurar o Madsonic na minha caixa do Ubuntu e fazer o Nginx rodar na frente dele. O problema é que recebo esse aviso quando tento fazer upload de material 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 alcançar é fazer o Nginx não usar buffers de corpo de solicitação em todos e apenas passar o corpo da solicitação diretamente para o Madsonic, independentemente do tamanho. Isso é possível? Se for, qual seria a configuração correta?

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

    
por rad 07.04.2016 / 06:44

1 resposta

10

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_size ainda tinha que ser 0 para evitar o erro, mas watch -n 1 du -hs . mostrou claramente uma diferença. Buffering 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 partes. Citação dos documentos do Nginx:

When HTTP/1.1 chunked transfer encoding is used to send the original request body, the request body will be buffered regardless of the directive value unless HTTP/1.1 is enabled for proxying.

    
por 01.12.2016 / 11:46