
Estou recebendo um tempo limite 504 no meu servidor Nginx:
504 Gateway Time-out
. O site permite que os usuários baixem arquivos de dados personalizados. O site funciona bem na maioria das condições e os usuários podem baixar alguns arquivos sem problemas. O problema é que os arquivos de dados só são gerados quando solicitados. Portanto, quando dados complexos são solicitados, o backend do Python leva mais de um minuto para gerar o arquivo e iniciar o download. Como não há resposta em um minuto, o Nginx retorna um arquivo 504 Gateway Time-out
. Os arquivos em si são arquivos CSV e não muito grandes, portanto os downloads são rápidos depois que o backend gera o arquivo, mas preciso de uma maneira de fazer o Nginx esperar mais.
Estou procurando uma maneira de aumentar o tempo limite do Nginx de 1 minuto para cerca de 10 minutos.
Até agora eu tentei:
alterando o nginx.conf
arquivo para incluir as seguintes linhas entre http {}
chaves
uwsgi_connect_timeout 75s;
proxy_connect_timeout 600;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;
Eu também tentei adicionar um timeout.conf
arquivo /etc/nginx/conf.d/
conforme sugerido porhttps://asdqwe.net/blog/solutions-504-gateway-timeout-nginx/:
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 600;
Depois de fazer cada alteração, reiniciei o servidor, mas o tempo limite ainda ocorre após 1 minuto. isso foi testado posteriormente executando um curl -o
no servidor para contornar quaisquer problemas do provedor de serviços. A saída foi a seguinte.
$curl -o out-put-file.csv "./localhost/my/url"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 183 100 183 0 0 3 0 0:01:01 0:01:00 0:00:01 48
E esse erro é gravado em error.log
2018/03/26 09:55:15 [error] 10105#10105: *1 upstream timed out (110: Connection timed out) while reading response header from upstream, client: 142.1.2.3, server: localhost, request: "GET /my/url", upstream: "uwsgi://unix:/tmp/my-applacation.sock", host: "142.1.2.3"
Quando executo meu aplicativo sem Nginx e executo o mesmo, curl -o
a solicitação demora um pouco (até 8 minutos dependendo dos dados solicitados), mas é concluída corretamente, sem erros ou tempo limite.
A execução $ /usr/sbin/nginx -V 2>&1 | grep conf
mostra que o arquivo de configuração está localizado em--conf-path=/etc/nginx/nginx.conf
Versão Nginx: nginx/1.12.2 e nginx/1.4.6 (Ubuntu)
Versão do sistema operacional: Ubuntu 16.04.1 e Ubuntu 14.04.5 LTS
Editar:
Eu testei alterar o número de trabalhadores_processes no arquivo de configuração apenas para ter certeza de que as alterações em outras coisas no arquivo de configuração foram detectadas e com certeza alterar esse número altera o número de trabalhadores para que o arquivo seja o arquivo correto e mude para ser pego pelo Nginx. Apenas não altera os tempos limite (ou talvez a seção http completa?). Também testei definir os tempos limite para 30 segundos, mas eles ainda atingem o tempo limite em 1 minuto. Além disso, tentei colocar essas configurações, sites-enabled/my_site
mas ainda obtive os mesmos resultados.
Editar2:
Pelo que sei, estou definindo os valores corretamente de acordo com a documentação do Nginx. uwsgi_connect_timeout
Responder1
Eu resolvi isso!!
O problema acabou por estar relacionado ao uwsgi, enquanto eu tinha definido
uwsgi_connect_timeout 75s;
o que eu realmente precisava definir era
uwsgi_read_timeout 600s;