web-dev-qa-db-fra.com

Impossible de modifier le délai d'expiration NGINX

Je reçois un délai d'expiration 504 sur mon serveur Nginx: 504 Gateway Time-out. Le site Web permet aux utilisateurs de télécharger des fichiers de données personnalisés. Le site fonctionne très bien dans la plupart des conditions et les utilisateurs peuvent télécharger certains fichiers sans problème. Le problème est que les fichiers de données ne sont générés que sur demande. Ainsi, lorsque des données complexes sont demandées, le backend Python prend plus d'une minute pour générer le fichier et démarrer le téléchargement. Parce qu'il n'y a pas de réponse dans une minute, Nginx renvoie un 504 Gateway Time-out. Les fichiers eux-mêmes sont des fichiers CSV et pas très volumineux, donc les téléchargements sont rapides après que le backend a généré le fichier, mais j'ai besoin d'un moyen pour faire attendre Nginx plus longtemps.

Je cherche un moyen d'augmenter le délai d'expiration de Nginx de 1 minute à environ 10 minutes.

Jusqu'à présent, j'ai essayé:

changer le nginx.conf fichier pour inclure les lignes suivantes entre les http {} un appareil dentaire

uwsgi_connect_timeout 75s;
proxy_connect_timeout 600;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
fastcgi_send_timeout 600s;
fastcgi_read_timeout 600s;

J'ai également essayé d'ajouter un timeout.conf fichier vers /etc/nginx/conf.d/ comme suggéré par https://asdqwe.net/blog/solutions-504-gateway-timeout-nginx/ :

proxy_connect_timeout       600;
proxy_send_timeout          600;
proxy_read_timeout          600;
send_timeout                600; 

Après avoir effectué chaque modification, j'ai redémarré le serveur, mais le délai d'expiration se produit toujours après 1 min. cela a été testé en exécutant un curl -o sur le serveur pour contourner tout problème de fournisseur de services. Le résultat était le suivant.

$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

Et cette erreur est écrite dans 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"

Lorsque j'exécute mon application sans Nginx et que j'exécute le même curl -o la demande prend un certain temps (jusqu'à 8 minutes selon les données demandées) mais elle se termine correctement sans erreur ni délai d'attente.


Fonctionnement $ /usr/sbin/nginx -V 2>&1 | grep conf indique que le fichier de configuration se trouve à --conf-path=/etc/nginx/nginx.conf


Version Nginx: nginx/1.12.2 et nginx/1.4.6 (Ubuntu)

Version du système d'exploitation: Ubuntu 16.04.1 et Ubuntu 14.04.5 LTS


Modifier:

J'ai testé la modification du nombre de processus de travailleur dans le fichier de configuration juste pour m'assurer que les modifications apportées à d'autres éléments du fichier de configuration ont bien été détectées et, en changeant suffisamment, ce nombre modifie le nombre de travailleurs afin que le fichier soit dans le fichier correct et change en être ramassé par Nginx. Tout simplement pas de changements dans les délais d'attente (ou peut-être la section http complète?). J'ai également testé le réglage des délais d'attente à 30 secondes, mais ils expirent toujours à 1 minute. De plus, vous avez essayé de mettre ces paramètres dans sites-enabled/my_site mais j'ai toujours les mêmes résultats.

Edit2:

Pour autant que je sache, je règle les valeurs correctement selon la documentation Nginx. wsgi_connect_timeout

ngx_http_proxy_module

5
Jeff

Je l'ai résolu !!

Le problème s'est avéré être lié à uwsgi, alors que j'avais

uwsgi_connect_timeout 75s;

ce que je devais réellement régler était

uwsgi_read_timeout 600s;
2
Jeff