504 Gateway Timeout

504 Gateway Timeout error guide banner

RÉPONSE DIRECTE

Une erreur 504 Gateway Timeout signifie qu’un proxy, un CDN, un load balancer ou une gateway a attendu la réponse d’un backend, mais que son délai d’attente a expiré en premier. Le backend peut être toujours en cours d’exécution ; les causes courantes incluent les requêtes lentes vers la base de données, les workers surchargés, les tâches longues, les services tiers retardés et les timeouts trop restrictifs des intermédiaires. Comparez le temps de réponse direct du backend avec celui de l’ensemble du chemin via la gateway avant de modifier les paramètres de timeout.

Points clés

  • Une erreur 504 signifie généralement que la réponse de l’upstream a pris trop de temps, et non que le backend était immédiatement inaccessible.
  • Si seuls les rapports, imports, exports ou recherches complexes échouent, examinez d’abord cette opération et son traitement par la base de données.
  • Augmenter le timeout du proxy n’est approprié que pour une opération connue, saine et qui nécessite légitimement plus de temps.
  • Les tâches en arrière-plan sont généralement préférables au maintien d’une requête du navigateur ouverte pour les opérations volumineuses ou lentes.
  • Comparer le temps de réponse direct du backend avec celui obtenu via le proxy, le CDN ou le load balancer aide à identifier la couche défaillante.
Mis à jour le 2026-09-24 · Révision éditoriale en attente Erreurs HTTP et serveur
SA

Site Administrator

Ce que signifie cette erreur et comment la reconnaître

  • Le navigateur affiche 504 Gateway Timeout après avoir attendu, au lieu d’échouer immédiatement.
  • Les rapports, imports groupés, exports, traitements d’images ou recherches complexes échouent alors que les pages simples continuent de fonctionner.
  • Les échecs deviennent plus fréquents lorsque l’application est très sollicitée ou que les requêtes sont mises en file d’attente.
  • Le backend répond lorsqu’il est testé directement, mais la même requête expire via un proxy, un CDN ou un load balancer.
  • Les logs de la gateway indiquent qu’une requête upstream a duré longtemps avant le renvoi de l’erreur 504.
  • L’application peut continuer le traitement après que le navigateur a reçu le timeout, ce qui peut laisser des tâches en double ou abandonnées si l’action est relancée.

Causes principales, classées par probabilité

  1. Requêtes lentes ou bloquées vers la base de données : des index manquants, des tables qui grossissent, des requêtes inefficaces et des conflits de verrous peuvent faire attendre l’application au-delà de la limite de la gateway.
  2. Surcharge ou mise en file d’attente du backend : les requêtes peuvent attendre des workers applicatifs, des connexions à la base de données, du CPU, de la mémoire ou d’autres ressources limitées.
  3. Opération synchrone réellement longue : les exports, imports, rapports ou traitements de fichiers volumineux peuvent être légitimes, mais inadaptés à une requête de page classique.
  4. API downstream ou webhook lent : l’application peut attendre un autre service avant de pouvoir répondre.
  5. Timeouts restrictifs du proxy ou du serveur : Nginx, Apache, un CDN ou un load balancer peut cesser d’attendre avant la fin du traitement de l’application.
  6. Problèmes réseau entre les couches de gateway : la latence, la perte intermittente de paquets ou les problèmes de routage sont plus plausibles dans les déploiements multi-serveurs ou multi-régions, en particulier lorsque le temps de traitement de l’application n’explique pas le délai.

Comment corriger le problème

1Toutes les requêtes échouent-elles ?2Le backend est-il lent lorsqu’il est testédirectement avec une requête autorisée et sûre ?3La requête dépasse-t-elle le timeout d’un proxy,d’un CDN ou d’un load balancer ?4Une dépendance tierce consomme-t-elle la majeure partiedu temps de la requête ?
Diagnostic flow at a glance — full detail in the steps below.

1. Identifier la requête en échec et sa durée

Consultez les logs d’accès de la gateway et de l’application pour trouver la requête à l’origine de l’erreur 504. Notez la route ou l’action utilisateur, l’horodatage, la durée de réponse, le statut et indiquez si toutes les requêtes échouent ou si une seule opération est concernée.

Si seuls les rapports, imports, exports ou recherches complexes échouent, commencez par examiner cette opération plutôt que de considérer l’incident comme une panne complète du serveur.

2. Comparer le backend avec l’ensemble du chemin de requête

Avec l’autorisation nécessaire et une requête de test sûre, comparez le temps de réponse direct du backend avec celui de la même requête via le proxy, le CDN ou le load balancer.

  • Une réponse lente en accès direct comme via la gateway indique plutôt un problème lié à l’application, à la base de données, à la capacité ou à une dépendance.
  • Une réponse directe rapide, mais une requête proxy qui échoue, indique plutôt un timeout d’intermédiaire, un problème de routage ou un problème réseau entre la gateway et le backend.

Ne contournez pas les contrôles d’accès de production et n’envoyez pas une requête qui modifie l’état uniquement à des fins de test.

3. Examiner le temps d’exécution de la base de données et les attentes liées aux verrous

Activez ou consultez les diagnostics des requêtes lentes et des attentes liées aux verrous de la base de données, conformément aux recommandations opérationnelles de votre plateforme de base de données. Recherchez les requêtes dont la durée approche ou dépasse le timeout actif de la gateway.

Vérifiez les index manquants, les jointures ou filtres inefficaces, la croissance des tables et les conflits de verrous. Optimisez la requête, réduisez le volume de données traité ou ajoutez un index uniquement après avoir confirmé qu’il corrige le goulot d’étranglement mesuré. Coordonnez les modifications de schéma ou d’index avec le responsable de la base de données, car elles peuvent consommer des ressources et affecter les charges concurrentes.

N’augmentez pas simplement le timeout pour dissimuler une requête qui devrait s’exécuter rapidement.

4. Vérifier la capacité du backend et les files d’attente

Examinez les métriques de l’application, du serveur web et du système afin de détecter l’épuisement des workers, les requêtes en attente, les limites de connexions à la base de données, la pression sur le CPU ou la mémoire et les autres contraintes de ressources présentes pendant l’échec.

Si les requêtes attendent que des ressources deviennent disponibles, corrigez ce goulot d’étranglement avant d’allonger les timeouts. Modifier la capacité ou les paramètres des processus peut affecter la stabilité du service ; effectuez donc ces changements avec l’autorisation opérationnelle et selon le processus de changement applicables.

5. Déplacer les traitements longs vers une tâche en arrière-plan

Pour les imports, exports, générations de rapports, traitements d’e-mails et tâches similaires, utilisez une tâche en arrière-plan lorsque l’application le permet. La requête initiale doit démarrer ou mettre en file le traitement, tandis qu’une vue d’état distincte ou une notification indique la progression et la fin de l’opération.

Cela évite de maintenir ouverts une connexion du navigateur, un worker de la gateway et une requête applicative pendant toute la durée de l’opération. Vérifiez que la tâche gère correctement les nouvelles tentatives et les soumissions en double avant d’adopter ce modèle.

6. Examiner attentivement les paramètres de timeout de Nginx

Si Nginx est la gateway, examinez les paramètres proxy_read_timeout et proxy_connect_timeout applicables dans le bloc server ou location concerné. Confirmez quelle couche applique le timeout avant de modifier quoi que ce soit.

Augmentez un timeout uniquement lorsque l’opération est censée durer plus longtemps, que le backend est sain et que la consommation supplémentaire de connexions et de workers est acceptable. Les modifications de configuration nécessitent l’autorisation appropriée. Après avoir enregistré la modification, validez la configuration et rechargez Nginx selon votre procédure normale de déploiement, puis répétez l’opération qui échouait auparavant. Ne combinez pas le rechargement d’un service avec des diagnostics en lecture seule dans le cadre d’un changement non planifié.

7. Examiner les paramètres du proxy Apache

Pour Apache utilisant mod_proxy, examinez les paramètres Timeout et ProxyTimeout applicables. Si des uploads volumineux sont concernés, examinez également le comportement pertinent de mod_reqtimeout.

Lorsque cela est possible, appliquez la modification sûre la plus ciblée à la route ou à l’opération concernée, avec une autorisation et un plan de retour arrière. Effectuez un nouveau test avec la même requête et vérifiez que les attentes prolongées n’épuisent pas les workers ou les connexions.

8. Vérifier le comportement du CDN et du load balancer

Si le site utilise Cloudflare ou un autre CDN ou load balancer, examinez le timeout de gateway, le routage vers l’origine, l’état de santé et la configuration associée au plan de ce service. Un intermédiaire peut appliquer une limite impossible à augmenter dans la configuration disponible.

Lorsque l’origine nécessite plus de temps que cette limite, optimisez l’opération ou déplacez-la vers un traitement asynchrone plutôt que de compter sur une requête du navigateur plus longue.

9. Isoler les appels tiers lents

Mesurez séparément chaque appel à une API externe ou à un webhook. Définissez, lorsque cela est possible, un timeout interne plus court pour une dépendance, gérez explicitement l’échec et renvoyez un état en attente ou permettant une nouvelle tentative lorsque le traitement peut se terminer ultérieurement.

Évitez qu’une dépendance peu fiable consomme l’intégralité du timeout de la gateway. Vérifiez que les nouvelles tentatives sont limitées et sûres avant d’ajouter un mécanisme automatique de retry.

10. Vérifier la correction

Répétez exactement l’action de la page ou la requête qui échouait auparavant. Confirmez qu’elle se termine dans le délai du timeout actif de la gateway et examinez ensuite les logs pour vous assurer que le backend n’accumule pas de traitements abandonnés, en double ou anormalement longs. Effectuez le test via l’ensemble du chemin de production, et pas uniquement directement contre le backend.

Prévention et vérification du correctif

  • Utilisez des tâches en arrière-plan pour les imports, exports, générations de rapports, traitements d’e-mails et autres opérations susceptibles de dépasser la durée d’une requête de page classique.
  • Examinez les index et les plans d’exécution des opérations de base de données associées aux pages qui expirent fréquemment, à mesure que les données augmentent.
  • Surveillez séparément la durée des requêtes, le temps en file d’attente, le temps de base de données, l’utilisation des workers et le temps des dépendances.
  • Définissez délibérément les timeouts du proxy et de l’application en fonction de l’opération légitime la plus lente, tout en limitant les timeouts des dépendances tierces.
  • Testez les opérations critiques via l’ensemble du chemin de production, y compris le CDN ou le load balancer, et pas uniquement contre l’origine.
  • Concevez les retries et les soumissions répétées de manière sûre afin qu’un timeout de gateway ne crée pas de tâches ou de transactions en double.
  • Après une modification, répétez exactement l’opération qui a expiré et vérifiez qu’elle se termine sans accumulation excessive de travail en file d’attente.

Quand demander une aide externe

Faites remonter le problème au fournisseur du CDN, du load balancer, de l’hébergement ou du réseau lorsque le backend répond rapidement lors d’un test direct autorisé, mais que l’erreur 504 persiste via l’intermédiaire, ou lorsque le timeout de l’intermédiaire ne peut pas être modifié dans votre configuration.

Impliquez l’équipe applicative ou l’équipe chargée de la base de données lorsque les logs montrent des requêtes lentes, des attentes liées aux verrous, des workers épuisés, des limites du pool de connexions, une pression sur les ressources ou une dépendance lente. Fournissez la route ou l’opération en échec, les horodatages et le fuseau horaire, la durée de la requête, les entrées pertinentes des logs de la gateway et de l’application, les temps de base de données concernés et indiquez si le test direct du backend réussit. Évitez de partager des identifiants, tokens ou données sensibles de requête lors de l’escalade.

Vérifier un site web

Questions fréquentes

Une erreur 504 Gateway Timeout est-elle causée par mon navigateur ?

Généralement non. Une erreur 504 est renvoyée par une gateway ou un proxy qui a attendu trop longtemps la réponse d’un upstream. Vous pouvez réessayer ou tester une autre connexion si une seule session est concernée, mais les logs de temps de la gateway et de l’application sont plus utiles que la suppression des données du navigateur.

Le serveur backend est-il hors service lorsqu’une erreur 504 apparaît ?

Pas nécessairement. Il peut être en fonctionnement, mais trop lent, surchargé, bloqué sur une requête de base de données ou en attente d’un autre service. Un test direct autorisé et les logs de l’application peuvent aider à distinguer un backend lent d’un problème de gateway ou de réseau.

Dois-je augmenter le timeout de Nginx ou d’Apache ?

Uniquement lorsque l’opération doit légitimement durer plus longtemps et que le backend est par ailleurs sain. Examinez d’abord les requêtes lentes, les files d’attente, les limites de workers et les appels tiers. Un timeout plus long peut mobiliser les workers et les connexions plus longtemps, tout en ne faisant que reporter le même échec.

Pourquoi les rapports ou les exports expirent-ils alors que les pages normales fonctionnent ?

Les rapports et les exports traitent souvent davantage de lignes de base de données, génèrent des fichiers ou attendent des services supplémentaires. Les pages normales peuvent rester rapides alors qu’une requête lourde dépasse la limite de la gateway. Optimisez l’opération ou exécutez-la comme tâche en arrière-plan au lieu de maintenir la requête de page ouverte.

Un CDN peut-il provoquer une erreur 504 lorsque l’origine fonctionne directement ?

Oui. Un CDN ou un load balancer peut appliquer son propre timeout de gateway ou rencontrer un problème de routage. Si l’origine termine rapidement, mais que la requête via proxy échoue, examinez le timeout de l’intermédiaire et le comportement du chemin vers l’origine. Certaines limites peuvent ne pas être configurables pour votre compte ou votre plan.

Que dois-je vérifier si une API tierce provoque l’erreur 504 ?

Mesurez séparément cette dépendance, définissez un timeout interne limité et gérez l’échec sans maintenir ouverte l’intégralité de la requête. Pour les traitements pouvant se terminer ultérieurement, renvoyez un état en attente et exécutez-les de manière asynchrone. Vérifiez que les retries ne peuvent pas soumettre la même transaction plus d’une fois.

Documentation complémentaire

Pour obtenir des informations de configuration faisant autorité, consultez la documentation de la gateway ou du reverse proxy utilisé, du serveur web, du CDN ou du load balancer, ainsi que des composants de base de données et de traitement des tâches de l’application. Portez une attention particulière aux timeouts de réponse upstream, aux timeouts de connexion, au comportement du proxy, aux files d’attente de requêtes, aux timeouts des dépendances et aux recommandations relatives aux tâches asynchrones.