Como desativar o tempo limite para o nginx?


47

Em uma máquina de desenvolvimento local, tenho um proxy reverso nginx da seguinte forma:

server {
  listen 80;
  server_name myvirtualhost1.local;
  location / {
    proxy_pass http://127.0.0.1:8080;
}

server {
  listen 80;
  server_name myvirtualhost2.local;
  location / {
    proxy_pass http://127.0.0.1:9090;
}

No entanto, se eu depurar meu aplicativo, a resposta poderá ser adiada por um período infinito de tempo, mas após 30 segundos eu recebo:

504 Gateway Time-out

como resposta.

Como posso desativar o tempo limite e fazer com que meu proxy reverso aguarde uma resposta para sempre? E eu gosto que a configuração seja global, para que eu não precise defini-la para cada proxy.


1
Considere iniciar um trabalho em segundo plano e permitir que o usuário verifique seu status posteriormente.
Michael Hampton

Respostas:


61

Talvez não seja possível desativá-lo, mas uma solução possível é aumentar o tempo de execução. Em um site tutorial do nginx , foi escrito:

Se você deseja aumentar o prazo para todos os sites em seu servidor, você pode editar o nginx.confarquivo principal :

vim /etc/nginx/nginx.conf

Adicione o seguinte na seção http {..}

http {
     fastcgi_read_timeout 300;
     proxy_read_timeout 300;
}

e recarregue a configuração do nginx:

sudo service nginx reload

Eu usei um valor bastante grande que é improvável que aconteça, 999999ou seja, ou use unidades de tempo , para um dia via 1d.

Cuidado ao definir o valor como para 0causar um erro de tempo limite do gateway imediatamente.


3
Caro downvoter aleatório, seria bom um comentário sobre o que é ruim nessa prática.
K0pernikus

7
@kb. É engraçado como que eu sou o OP e só postou a solução mais viável como uma resposta, enquanto espera por uma solução real ^^
k0pernikus

2
Haha, eu perdi completamente que você era OP. Mas sua resposta é a correta, você pode deixar ainda mais claro (para futuros googlers como eu) que não há como desativá-lo. =)
kb.

5
Obrigado pela informação sobre 0não funcionar! Observe que você pode especificar unidades de tempo com sufixos legíveis , para poder usar um valor como 1d.
Nome verdadeiro Editado

3
Eu adicionei isso e proxy_connect_timeout 600;ao arquivo nginx.conf, mas o tempo limite ainda está em 60 segundos. Mais alguma coisa que eu deveria tentar?
andreszs

9

Se você estiver usando o AWS e o Load Balancer, edite o tempo limite de inatividade. Eu acho que o padrão é 60 segundos


Entendo por que isso foi recusado, mas talvez se a resposta fosse atualizada para explicar seu caso de uso, seria mais útil. Embora isso não atenda ao OP, é algo útil a considerar se você estiver usando o ELB, pois há um limite de quanto tempo eles manterão uma conexão aberta também.
Doz87 2/10

@ doz87 sim, é apenas algo a considerar
szeljic 2/18

Vale realmente a pena verificar, especialmente no meu caso, que trabalhar com Magento sob a AWS. Bom ponto @szeljic
vnpnlz

Graças bro, isso funciona para mim desde que eu uso AWS balanceador de carga para distribuir à minha instância EC2
Vũ Thành Tâm

Isso merece todos os votos positivos - todos os usuários da AWS ainda estarão limitados a 60 segundos, independentemente de suas configurações NGINX sem isso
Aphire

4

Eu estive lutando com o erro de tempo limite do nginx 502 e não consegui resolver o problema. No entanto, passou a ser gunicorn causando o erro de tempo limite. Então, você também pode precisar verificar as configurações do fastcgi.

Para gunicorn é:

gunicorn wsgi:application --timeout 300
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.