Como faço para evitar um tempo limite do gateway com FastCGI no Nginx

Estou executando o Django, FastCGI e Nginx. Eu estou criando uma espécie de API onde alguém pode enviar alguns dados via XML que eu processarei e, em seguida, retornar alguns códigos de status para cada nó que foi enviado.

O problema é que o Nginx lançará um Tempo Limite de 504 Gateway se demorar muito para processar o XML – acho que há mais de 60 segundos.

Portanto, gostaria de configurar o Nginx para que, se qualquer solicitação correspondente à localização / api, não tenha tempo limite de 120 segundos. Que configuração vai conseguir isso?

O que eu tenho até agora é:

# Handles all api calls location ^~ /api/ { proxy_read_timeout 120; proxy_connect_timeout 120; fastcgi_pass 127.0.0.1:8080; } 

Edit: O que eu tenho não está funcionando 🙂

Os tempos limite de proxy estão bem, para proxies, não para FastCGI …

As diretivas que afetam os tempos limite do FastCGI são client_header_timeout , client_body_timeout e send_timeout .

Edit : Considerando o que é encontrado no wiki nginx, a diretiva send_timeout é responsável por definir o tempo limite geral de resposta (que foi pouco enganador). Para o FastCGI, há fastcgi_read_timeout que está afetando o tempo limite de resposta do processo fastcgi .

HTH.

Para aqueles que usam nginx com unicórnio e rails, provavelmente o tempo limite está no seu arquivo unicorn.rb

coloque um tempo limite grande em unicorn.rb

 timeout 500 

Se você ainda estiver enfrentando problemas, tente ter fail_timeout = 0 no seu upstream no nginx e veja se isso resolve o problema. Isso é para fins de debugging e pode ser perigoso em um ambiente de produção.

 upstream foo_server { server 127.0.0.1:3000 fail_timeout=0; } 

Se você usa unicórnio.

Olhe em top no seu servidor. Unicorn provavelmente está usando 100% da CPU agora. Existem várias razões para este problema.

  • Você deve verificar seus pedidos HTTP, alguns deles podem ser muito difíceis.

  • Verifique a versão do unicórnio. Pode ser que você tenha atualizado recentemente e algo foi quebrado.

Na seção http nginx (/etc/nginx/nginx.conf) adicione ou modifique:

 keepalive_timeout 300s 

Na seção nginx do server (/etc/nginx/sites-available/your-config-file.com) adicione estas linhas:

 client_max_body_size 50M; fastcgi_buffers 8 1600k; fastcgi_buffer_size 3200k; fastcgi_connect_timeout 300s; fastcgi_send_timeout 300s; fastcgi_read_timeout 300s; 

No arquivo php no caso 127.0.0.1:9000 (/etc/php/7.X/fpm/pool.d/www.conf) modificar:

 request_terminate_timeout = 300 

Espero te ajudar.