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
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;