nginx - o corpo da solicitação do cliente é armazenado em buffer em um arquivo temporário


49

Eu recebo o seguinte erro nos meus arquivos de log sempre que tento carregar um arquivo grande.

a client request body is buffered to a temporary file /var/lib/nginx/body/0000000001

Embora o arquivo seja carregado com êxito, sempre recebo o erro acima.

Aumentei o valor client_body_buffer_sizepara o 1000mqual eu espero que o maior arquivo carregado seja. No entanto, isso foi apenas um palpite e, embora eu não receba mais esse erro, pergunto-me se esse é um valor apropriado para o client_body_buffer_size?

Eu apreciaria se alguém pudesse lançar alguma luz sobre essa diretiva e como ela deve ser usada.


2
Eu tenho isso não foi enviado com sucesso.
Ben

Respostas:


51

Este é um aviso, não um erro. É por isso que foi precedido [warn]no log.

Isso significa que o tamanho do arquivo carregado foi maior que o buffer da memória reservado para uploads.

A diretiva client_body_buffer_sizecontrola o tamanho desse buffer.

Se você pode ter 1 GB de RAM sempre reservado para o upload ocasional de arquivos, tudo bem. É uma otimização de desempenho para armazenar em buffer o upload na RAM em vez de em um arquivo temporário no disco, embora com envios tão grandes alguns segundos extras provavelmente não importem muito. Se a maioria dos seus envios for pequena, provavelmente será um desperdício.

No final, somente você pode realmente tomar a decisão sobre qual é o tamanho apropriado.


5
Sua resposta me ajudou a tomar uma decisão. Vou diminuir o valor para cerca de 512k a 1m. É uma pena que recebo muitos desses avisos.
Abs

Por causa da memória virtual , o uso de um valor alto não levará a "1 GB de RAM sempre reservado para o upload ocasional de arquivos". (Não mais RAM do que é realmente necessário para o upload atual será usado.)
Kirill Bulygin

1
Se eu definisse isso para 50 MB e 200 pessoas visualizassem uma página no mesmo instante, isso consumiria 10 GB de memória ou os 50 MB seriam alocados apenas para usuários que executam um upload de arquivo?
Codemonkey

@Codemonkey Esse buffer é usado apenas enquanto um corpo de solicitação está sendo carregado. Depois que o upload é concluído, a memória fica livre para ser usada para outra solicitação. E, como o outro comentarista apontou, enquanto um upload não está em andamento, nenhuma memória é usada. Portanto, depende de quantos uploads simultâneos você realiza em um determinado instante.
Michael Hampton

Muitas vezes, dez, provavelmente nunca mais do que 20. Caixa de 128GB, por isso tenho bastante memória ..! Honestamente, eu faria isso apenas para me livrar dessas linhas [alert] no meu log de erros - eu provavelmente deveria ignorá-las!
Codemonkey

18

Se você não deseja que o NginX armazene o conteúdo do corpo em um arquivo temporário, é possível definir sua configuração. como isso:

    client_body_buffer_size     10M;
    client_max_body_size        10M;

Se você definir essas duas configurações no mesmo valor máx. tamanho (em k, M ou G para kB, MB ou GB, respectivamente), você evitará que o NginX crie uma temperatura. Arquivo.

Para obter mais informações: http://nginx.org/en/docs/http/ngx_http_core_module.html#client_body_buffer_size e http://nginx.org/en/docs/http/ngx_http_core_module.html#client_max_body_size


8
Mas com essa configuração, você também impedirá todos os envios maiores que 10 MiB.
Josef

@ Josef: Não impedir por qualquer meio. É só que a solicitação precisará ser armazenada em buffer no disco e você receberá o aviso. Verifique a resposta aceita.
OmarOthman

9
@OmarOthman, Josef está certo por causa do client_max_body_sizeparâmetro. Veja as informações neste link: client_max_body_size doc. : Sets the maximum allowed size of the client request body, specified in the “Content-Length” request header field. If the size in a request exceeds the configured value, the 413 (Request Entity Too Large) error is returned to the client. Please be aware that browsers cannot correctly display this error. Setting size to 0 disables checking of client request body size.
eddy85br
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.