Tenho o Puma em execução como servidor de aplicativos upstream e Riak como meu cluster db em segundo plano. Quando envio uma solicitação que mapeia um pedaço de dados para cerca de 25 mil usuários e os retorna de Riak para o aplicativo, recebo um erro no log do Nginx:
tempo limite upstream excedido (110: tempo limite excedido da conexão) ao ler o cabeçalho de resposta do upstream
Se eu consultar meu upstream diretamente sem o proxy nginx, com a mesma solicitação, obtenho os dados necessários.
O tempo limite do Nginx ocorre quando o proxy é inserido.
**nginx.conf**
http {
keepalive_timeout 10m;
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
include /etc/nginx/sites-enabled/*.conf;
}
**virtual host conf**
upstream ss_api {
server 127.0.0.1:3000 max_fails=0 fail_timeout=600;
}
server {
listen 81;
server_name xxxxx.com; # change to match your URL
location / {
# match the name of upstream directive which is defined above
proxy_pass http://ss_api;
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_cache cloud;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
proxy_cache_bypass $http_authorization;
proxy_cache_bypass http://ss_api/account/;
add_header X-Cache-Status $upstream_cache_status;
}
}
O Nginx tem várias diretivas de tempo limite. Não sei se estou perdendo algo importante. Qualquer ajuda seria muito apreciada ....
Respostas:
Isso acontece porque o seu upstream leva muito para responder à solicitação e o NGINX acha que o upstream já falhou no processamento da solicitação, por isso responde com um erro. Basta incluir e aumentar o proxy_read_timeout no
location
bloco de configuração. A mesma coisa aconteceu comigo e usei o tempo limite de 1 hora para um aplicativo interno no trabalho:Com isso, o NGINX aguardará uma hora (3600s) para que seu upstream retorne algo.
fonte
proxy_read_timeout
na seção http pode não ajudar. Eu tenho aproxy_pass
diretiva na seção local e somente lá aproxy_read_timeout
configuração fez a diferença. (nginx 1.16.0)Você sempre deve evitar aumentar o tempo limite, duvido que o tempo de resposta do servidor back-end seja o problema aqui em qualquer caso.
Eu resolvi esse problema limpando o sinalizador de manutenção de conexão e especificando a versão http conforme a resposta aqui: https://stackoverflow.com/a/36589120/479632
Infelizmente, não consigo explicar por que isso funciona e não consegui decifrá-lo dos documentos mencionados na resposta vinculada. Portanto, se alguém tiver uma explicação, eu ficaria muito interessado em ouvi-la.
fonte
proxy_read_timeout
se sabia que o proxy (mesmo para um URL específico) exigia mais tempo de processamento?$http_host
certo? Suponho que não voaria para https. Também podem ser necessárias configurações adicionais para proxy de solicitações https.Primeiro, descubra qual upstream está mais lento consultando o arquivo de log de erros nginx e ajuste o tempo limite de leitura de acordo no meu caso, foi fastCGI
Então eu tenho que ajustar o fastcgi_read_timeout na minha configuração do servidor
Veja: postagem original
fonte
No seu caso, ajuda um pouco de otimização no proxy, ou você pode usar "# time out settings"
fonte
proxy_pass
na localização seção.Acho que esse erro pode ocorrer por vários motivos, mas pode ser específico para o módulo que você está usando. Por exemplo, eu vi isso usando o módulo uwsgi, então tive que definir "uwsgi_read_timeout".
fonte
Eu recomendaria examinar
error_logs
, especificamente a parte a montante, onde mostra a montante a montante que está atingindo o tempo limite.Em seguida, com base no que você pode ajustar
proxy_read_timeout
,fastcgi_read_timeout
ouuwsgi_read_timeout
.Verifique também se a sua configuração está carregada.
Mais detalhes aqui Nginx upstream excedeu o tempo limite (por que e como corrigir)
fonte
Como muitas outras pessoas apontaram aqui, o aumento das configurações de tempo limite do NGINX pode resolver seu problema.
No entanto, aumentar as configurações de tempo limite pode não ser tão simples quanto sugerem muitas dessas respostas. Eu mesmo enfrentei esse problema e tentei alterar minhas configurações de tempo limite no arquivo /etc/nginx/nginx.conf , como quase todo mundo nesses tópicos sugere. Isso não me ajudou nem um pouco; não houve alterações aparentes nas configurações de tempo limite do NGINX. Agora, muitas horas depois, finalmente consegui resolver esse problema.
A solução está neste tópico do fórum , e o que diz é que você deve colocar suas configurações de tempo limite em /etc/nginx/conf.d/timeout.conf (e se esse arquivo não existir, você deve criá-lo). Eu usei as mesmas configurações sugeridas no tópico:
fonte
Eu tive o mesmo problema e o resultado foi um erro "todos os dias" no controlador de rails. Não sei por que, mas na produção, o puma executa o erro repetidamente, causando a mensagem:
tempo limite upstream excedido (110: tempo limite excedido da conexão) ao ler o cabeçalho de resposta do upstream
Provavelmente porque o Nginx tenta obter os dados do puma repetidamente. O engraçado é que o erro causou a mensagem de tempo limite, mesmo que eu esteja chamando uma ação diferente no controlador, portanto, um único erro de digitação bloqueia todo o aplicativo.
Verifique seu arquivo log / puma.stderr.log para ver se é essa a situação.
fonte
Do nosso lado, estava usando spdy com cache proxy. Quando o cache expira, obtemos esse erro até que o cache seja atualizado.
fonte
Espero que ajude alguém: eu encontrei esse erro e a causa foi a permissão errada na pasta de log do phpfpm, depois de alterá-lo para que o phpfpm pudesse escrever nele, estava tudo bem.
fonte
Por
proxy_upstream
tempo limite, tentei a configuração acima, mas essas não funcionaram.A configuração
resolver_timeout
funcionou para mim, sabendo que demorava 30 anos para produzir a mensagem de tempo limite upstream. Por exemplo, me.atwibble.com não pôde ser resolvido (110: Tempo limite da operação esgotado) .http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver_timeout
fonte