Eu tenho um pouco grandes e lentas (dados complexos, complexo frontend) aplicação web construir em RoR
e servidos por Puma
com nginx
proxy como inversa. Observando o nginx
log de erros, vejo algumas entradas como:
2014/04/08 09:46:08 [warn] 20058#0: *819237 an upstream response is buffered to a temporary file
/var/lib/nginx/proxy/8/47/0000038478 while reading upstream,
client: 5.144.169.242, server: engagement-console.foo.it,
request: "GET /elements/pending?customer_id=2&page=2 HTTP/1.0",
upstream: "http://unix:///home/deployer/apps/conversationflow/shared/sockets/puma.sock:/elements/pending?customer_id=2&page=2",
host: "ec.reputationmonitor.it",
referrer: "http://ec.foo.it/elements/pending?customer_id=2&page=3"
Estou bastante curioso, pois é muito improvável que a página permaneça a mesma para diferentes usuários e diferentes interações, e eu não acho que o buffer da resposta no disco seja necessário / útil.
Eu conheço proxy_max_temp_file_size
e defini-lo como 0, mas me parece um pouco estranho (meu proxy tenta armazenar em buffer, mas não tem nenhum arquivo para armazenar em buffer ... como isso pode ser mais rápido?).
Minhas perguntas são:
Como posso remover o [aviso] e evitar respostas do buffer? É melhor desligar
proxy_buffering
ou definirproxy_max_temp_file_size
como 0? Por quê?Se
nginx
uma resposta é armazenada em buffer: quando ela serve a resposta em buffer, para quem e por quê?Por que
nginx
ligaproxy_buffering
por padrão e depois avisa se ele realmente armazena uma resposta?Quando uma resposta aciona essa opção? Quando leva alguns segundos (quantos?) Para servir a resposta? Isso é configurável?
TIA, agora.
Respostas:
Você deve definir
proxy_max_temp_file_size
como 0 para removê-lo. Aproxy_buffering
diretiva não está diretamente relacionada ao aviso. Você pode desativá-lo para interromper qualquer buffer, mas isso não é recomendado em geral (a menos que seja necessário para o Comet ).Ele servidores imediatamente, mas um cliente geralmente tem uma conexão muito mais lenta e não pode consumir os dados de resposta tão rapidamente quanto produzidos pelo seu aplicativo. O Nginx tenta armazenar em buffer toda a resposta para liberar seu aplicativo o mais rápido possível.
Veja também: http://aosabook.org/en/nginx.html
Como eu já mencionei, o
proxy_buffering
não está diretamente relacionado ao aviso. Geralmente, é necessário para operações de proxy otimizadas e desativá-lo degrada o desempenho e a taxa de transferência.O Nginx apenas avisa quando uma resposta não se encaixa nos buffers de memória configurados. Você pode ignorar o aviso se estiver bem para você.
É acionado quando os buffers de memória estão cheios. Por favor, veja os documentos, todo o mecanismo é explicado: http://nginx.org/r/proxy_max_temp_file_size
Você pode querer aumentar os buffers de memória.
fonte
proxy_max_temp_file_size
como0
ou isso é apenas uma maneira de remover esse aviso?A seguinte configuração funciona bem no meu servidor.
fonte
16k
a primeira linha está fazendo exatamente o mesmo que a segunda linha?Sets the size of the buffer used for reading the first part of the response received from the proxied server. This part usually contains a small response header
. Proxy_buffers é para o resto da resposta.