Modes de paiement Abuse

Corriger le délai d'attente de la passerelle 504 Nginx

20.02.2024, 23:31

Une erreur 504 Gateway Timeout dans Nginx signifie que le serveur exécutant Nginx n'a pas été en mesure de recevoir une réponse du serveur proxy dans le délai spécifié. Cela se produit généralement parce que le serveur proxy ne peut pas traiter la demande dans le délai spécifié ou en raison de problèmes de connexion entre Nginx et le serveur proxy.

Pourquoi l'erreur 504 Gateway Timeout apparaît-elle ?

L'erreur se produit lorsque le serveur Nginx fonctionne en mode proxy. Cela se produit lorsque php-fpm ou Apache est utilisé. Si nous traduisons cette erreur de l'anglais au russe, nous obtenons ce qui suit : le temps d'attente d'une réponse du serveur a été dépassé.

Plusieurs raisons expliquent ce comportement :

  • le script PHP ou d'un autre langage s'est complètement bloqué et ne renvoie plus de réponse ;
  • le script s'exécute pendant très longtemps, mais Nginx dispose d'un intervalle configuré pour réinitialiser la connexion si le serveur cible n'a pas répondu à la demande dans le délai imparti ;
  • le serveur est surchargé et n'a pas le temps de servir tous les clients et de renvoyer des réponses à toutes les requêtes Nginx.

Voyons maintenant ce que vous pouvez faire et comment corriger l'erreur 504 Gateway Timeout.

Comment réparer l'erreur 504 gateway time out Nginx ?

La première chose à essayer en pratique est que si votre serveur, php-fpm ou apache manque de ressources système, telles que la mémoire ou le CPU, voyez la RAM libre en utilisant la commande free :

$ free -h

Vous pouvez connaître la charge du processeur avec la commande htop:

$ htop

Si vous constatez que PHP occupe tout le temps du processeur, cela signifie que le problème se situe au niveau des ressources du serveur. Vous pouvez essayer de modifier le moteur du site, d'optimiser les ressources ou de choisir un serveur VPS puissant.

La deuxième option - si le script a été planifié pour fonctionner pendant longtemps. Dans ce cas, vous devez configurer Nginx pour qu'il attende une réponse d'Apache ou de php-fpm. Pour résoudre le problème dans le cas de php-fpm, il suffit d'ajouter deux lignes au bloc de configuration fastgci :

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

300 signifie 300 secondes, pour la plupart des scripts, c'est suffisant, mais il n'est pas difficile d'en mettre plus si nécessaire. L'erreur 504 peut également se produire lorsque Nginx est utilisé comme proxy pour Apache ou tout autre serveur web, vous devez alors également configurer le temps d'attente pour le proxy.

Ajoutez ces lignes à la section serveur:

proxy_connect_timeout 600;

proxy_send_timeout 600;

proxy_read_timeout 600;

send_timeout 600;

Dans ce cas, nous avons un délai d'attente de 600 secondes.

Nous devons maintenant redémarrer Nginx :

$ sudo systemctl restart nginx

Une autre raison et sa solution si le script se bloque. Si vous exécutez le script vous-même, vous verrez immédiatement ce qui bloque, mais si une telle erreur est rencontrée par les utilisateurs, il s'agit d'un problème plus grave. Vous pouvez voir si vos utilisateurs rencontrent de telles erreurs et où elles se produisent en utilisant la commande :

$ fgrep -i " 504 " /var/log/nginx/access.log

Des informations plus détaillées peuvent parfois être trouvées dans le fichier error.log :

$ fgrep -i " 504 " /var/log/nginx/error.log

En outre, si php-fpm est à l'origine du problème, vous pouvez savoir quels scripts s'exécutent lentement à l'aide de la fonction slow-log intégrée.

Pour l'activer, ajoutez les lignes suivantes à la configuration de votre pool :

$ sudo vi /etc/php-fpm.d/www.conf
slowlog = /var/log/php-fpm/www-slow.log
request_slowlog_timeout = 5s

Ceci complète l'instruction.