web-dev-qa-db-fra.com

Comment désactiver le timeout pour nginx?

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

Pourtant, si je débogue mon application, la réponse peut être retardée pendant une durée infinie, mais après 30 secondes, j'obtiens:

504 Gateway Time-out

comme réponse.

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

57
k0pernikus

Il n'est peut-être pas 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 principal nginx.conf fichier:

vim /etc/nginx/nginx.conf

Ajouter les éléments suivants 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 élevée qui ne se produira probablement pas, c'est-à-dire 999999 ou en utilisant nités de temps , à un jour via 1d.

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

74
k0pernikus

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

14
szeljic

Je me bats 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é que c'était le licorne qui provoquait l'erreur de temporisation. Vous devrez donc peut-être également vérifier vos paramètres fastcgi.

Pour gunicorn c'est:

gunicorn wsgi:application --timeout 300
6
Kostyantyn

Il est possible d'augmenter le délai d'attente pour nginx, pour ajouter à la réponse de @ k0pernikus, les éléments suivants peuvent être ajoutés à 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 quelques secondes.

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

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

Rechargez ensuite nginx avec:

nginx -s reload
4
Vasantha Ganesh K