125 votes

Comment désactiver le délai d'attente pour nginx ?

Sur une machine de développement locale, j'ai un proxy inversé nginx comme suit :

server {
  listen 80;
  server_name myvirtualhost1.local;
  location / {
    proxy_pass http://127.0.0.1:8080;
}

server {
  listen 80;
  server_name myvirtualhost2.local;
  location / {
    proxy_pass http://127.0.0.1:9090;
}

Pourtant, si je débogue mon application, la réponse peut être retardée indéfiniment, et après 30 secondes j'obtiens :

504 Gateway Time-out

comme réponse.

Comment puis-je désactiver le délai d'attente et faire en sorte que mon proxy inversé attende indéfiniment une réponse ? Et j'aimerais que ce réglage soit global, de sorte que je n'aie pas à le définir pour chaque proxy.

1 votes

Considérez de commencer un travail en arrière-plan et permettez à l'utilisateur de vérifier son statut plus tard.

146voto

Flying Trashcan Points 604

Il peut ne pas être possible de le désactiver du tout, mais une solution de contournement possible est d'augmenter le temps d'exécution. Sur un site de tutoriel nginx, il a été écrit:

Si vous souhaitez augmenter la limite de temps pour tous les sites sur votre serveur, vous pouvez modifier le fichier nginx.conf principal :

vim /etc/nginx/nginx.conf

Ajoutez ce qui suit dans la section http{..}

http {
     fastcgi_read_timeout 300;
     proxy_read_timeout 300;
}

et recharger la configuration de nginx :

sudo service nginx reload

J'ai utilisé une valeur plutôt grande qui est peu probable de se produire, c'est-à-dire 999999 ou en utilisant des unités de temps, pour un jour via 1d.

Soyez conscient que définir la valeur à 0 entraînera immédiatement une erreur de délai d'attente de passerelle.

12 votes

Cher voteur négatif aléatoire, un commentaire sur ce qui est mauvais à propos de cette pratique serait apprécié.

0 votes

Je ne suis pas celui qui a mis un pouce vers le bas, mais on peut supposer que l'auteur de la question voulait savoir comment désactiver le délai et que la réponse donne simplement comment l'augmenter. Ce n'est donc pas une réponse à la question posée par l'auteur de la question.

11 votes

@kb. C'est amusant que je sois l'auteur du message initial et que j'ai simplement posté la solution la plus pratique comme réponse, en attendant une vraie solution ^^

43voto

Vasantha Ganesh Points 361

Il est possible d'augmenter le délai d'attente pour nginx, pour compléter la réponse de @k0pernikus, vous pouvez ajouter ce qui suit à votre bloc de localisation :

        location /xyz {
         proxy_read_timeout 1800;
         proxy_connect_timeout 1800;
         proxy_send_timeout 1800;
         send_timeout 1800;
        }

Ici, 1800 est en secondes.

Après avoir modifié la configuration, vérifiez la syntaxe avec :

nginx -t -c /some/path/nginx.conf

Ensuite, rechargez nginx avec :

nginx -s reload

5 votes

À propos de chaque délai nginx.org/en/docs/http/…

0 votes

Y a-t-il un moyen de définir une variable comme 1800 et ensuite d'assigner cette variable, j'ai essayé en utilisant set, mais cela n'a pas fonctionné

1 votes

@MaxCarroll, je ne pense pas que les fichiers de configuration prennent généralement en charge les variables. Set ne fonctionnerait pas car ce n'est pas du bash.

28voto

szeljic Points 371

Si vous utilisez AWS et le Load Balancer, vous devriez modifier le délai d'inactivité. Je pense que par défaut il est de 60 secondes

0 votes

Je comprends pourquoi cela a été down voté mais peut-être que si la réponse était mise à jour pour expliquer son cas d'utilisation, elle serait plus utile. Bien que cela ne réponde pas à la question de l'OP, c'est quelque chose d'utile à considérer si vous utilisez ELB car il y a une limite sur la durée pendant laquelle ils garderont une connexion ouverte aussi.

0 votes

@doz87 oui, c'est juste quelque chose à prendre en considération

0 votes

Cela vaut vraiment la peine de vérifier surtout dans mon cas de travail avec Magento sous AWS. Bon point @szeljic

12voto

MJerry Points 11

J'ai combattu l'erreur de délai d'attente 502 de nginx et je n'ai pas pu résoudre le problème. Cependant, il s'est avéré que c'était gunicorn qui provoquait l'erreur de délai d'attente. Vous devrez peut-être aussi vérifier vos paramètres fastcgi.

Pour gunicorn, c'est:

gunicorn wsgi:application --timeout 300

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X