Não é possível alterar o tempo limite do NGINX

2

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

ngx_http_proxy_module

    
por Jeff 15.02.2018 / 19:00

1 resposta

0

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;
    
por 26.03.2018 / 20:24