Eu resolvi isso !!
O problema acabou por ser relacionado ao uwsgi, enquanto eu tinha definido
uwsgi_connect_timeout 75s;
o que eu realmente precisei definir foi
uwsgi_read_timeout 600s;
Estou recebendo um tempo limite de 504 no meu servidor Nginx:
%código%.
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 dentro de um minuto, o Nginx retorna um 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 eu 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 arquivo 504 Gateway Time-out
para incluir as seguintes linhas entre as nginx.conf
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 arquivo http {}
a timeout.conf
como sugerido por link :
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 min.
Isso foi testado ainda mais executando um /etc/nginx/conf.d/
no servidor para ignorar 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 o Nginx e executo o mesmo curl -o
, a solicitação demora bastante (até 8 minutos, dependendo dos dados solicitados), mas é concluída corretamente sem erros ou um tempo limite.
A execução de curl -o
mostra que o arquivo de configuração está localizado em $ /usr/sbin/nginx -V 2>&1 | grep conf
Versão do Nginx: nginx / 1.12.2 e nginx / 1.4.6 (Ubuntu)
Versão do SO: Ubuntu 16.04.1 e Ubuntu 14.04.5 LTS
Editar:
Eu testei a alteração do número de worker_processes no arquivo de configuração apenas para ter certeza de que as alterações em outras coisas no arquivo de configuração foram apanhadas e, com certeza, alterar esse número altera o número de trabalhadores para que o arquivo tenha o arquivo correto e muda para ser pego pelo Nginx. Apenas não muda para o tempo limite (ou talvez a seção completa http?). Também testei a configuração dos tempos limite para 30s, mas eles ainda têm um tempo limite de 1 minuto. Além disso, tentei colocar essas configurações em --conf-path=/etc/nginx/nginx.conf
, mas ainda tenho os mesmos resultados.
Edit2:
Tanto quanto eu posso dizer que estou definindo os valores de acordo com a documentação do Nginx. uwsgi_connect_timeout
Tags configuration nginx timeout