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

47

Sur une machine de développement local, j'ai un proxy inverse nginx comme ceci:

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

Cependant, si je débogue mon application, la réponse risque d’être retardée pendant une durée infinie. Cependant, au bout de 30 secondes, j’obtiens:

504 Gateway Time-out

en réponse.

Comment désactiver le délai d'attente et laisser mon proxy inverse attendre une réponse pour toujours? Et j'aime que le paramètre soit global, de sorte que je n'ai pas à le définir pour chaque proxy.

k0pernikus
la source
1
Envisagez de démarrer un travail en arrière-plan et de permettre à l'utilisateur de vérifier son statut ultérieurement.
Michael Hampton

Réponses:

61

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

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

vim /etc/nginx/nginx.conf

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

http {
     fastcgi_read_timeout 300;
     proxy_read_timeout 300;
}

et rechargez la configuration de nginx:

sudo service nginx reload

J'ai utilisé une valeur assez importante qui risque de ne pas arriver, c’est-à-dire en 999999utilisant des unités de temps , pour un jour via 1d.

Attention, le fait de définir la valeur sur 0provoquera immédiatement une erreur de temporisation de passerelle.

k0pernikus
la source
3
Cher électeur, un hasard sur ce qui serait mauvais à propos de cette pratique serait bien.
k0pernikus
7
@kb. C'est drôle car je suis l'OP et je viens de poster la solution la plus pratique en guise de réponse, en attendant une vraie solution ^^
k0pernikus
2
Haha, j'ai complètement manqué que tu étais OP. Mais votre réponse est la bonne, vous pouvez préciser encore (pour les futurs utilisateurs comme moi) qu’il n’ya aucun moyen de le désactiver. =)
kb.
5
Merci pour l'info de 0ne pas travailler! Notez que vous pouvez spécifier des unités de temps avec des suffixes lisibles . Vous pouvez donc utiliser une valeur telle que 1d.
Nom réel expurgé
3
J'ai ajouté cela et proxy_connect_timeout 600;le fichier nginx.conf, mais le délai d'attente est toujours de 60 secondes. Quelque chose d'autre que je devrais essayer?
andreszs
9

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

szeljic
la source
Je comprends pourquoi cela a été voté à la baisse, mais peut-être que si la réponse était mise à jour pour expliquer son cas d'utilisation, ce serait plus utile. Bien que cela ne réponde pas au PO, il est utile de considérer si vous utilisez ELB car il existe une limite à la durée pendant laquelle la connexion sera maintenue.
Doz87
@ doz87 oui, c'est juste quelque chose à considérer
szeljic
Cela vaut vraiment la peine de vérifier, surtout si je travaille avec Magento sous AWS. Bon point @szeljic
vnpnlz
Merci mon frère, cela fonctionne pour moi puisque j'utilise l'équilibreur de charge AWS pour la distribution sur mon instance EC2
Vũ Thành Tâm
Cela mérite tous les votes positifs - tous les utilisateurs AWS resteront limités à 60 secondes quels que soient leurs paramètres
NGINX
4

Je me suis battu avec l'erreur de délai d'attente nginx 502 et je n'ai pas pu résoudre le problème. Cependant, il s'est avéré qu'il s'agissait d'un tir au canon provoquant l'erreur de délai d'attente. Donc, vous devrez peut-être aussi vérifier vos paramètres fastcgi.

Pour gunicorn c'est:

gunicorn wsgi:application --timeout 300
Kostyantyn
la source