Erreur HTTP 504 : Gateway Timeout

Quand votre proxy attend une réponse qui ne vient jamais

L'erreur HTTP 504 Gateway Timeout se produit lorsqu'un serveur agissant comme passerelle ou proxy n'a pas reçu de réponse du serveur upstream dans le délai imparti. C'est une erreur de la famille 5xx indiquant un problÚme cÎté serveur, spécifiquement dans la chaßne de communication entre différents composants de l'infrastructure.

Contrairement au 502 Bad Gateway oĂč le backend rĂ©pond mais de maniĂšre invalide, le 504 indique une absence totale de rĂ©ponse dans le temps allouĂ©. Le proxy a bien transmis la requĂȘte au backend, mais ce dernier n'a pas rĂ©pondu avant que le timeout ne soit atteint. Le silence du backend est le problĂšme.

Dans les architectures modernes avec reverse proxies, CDN et load balancers, le 504 est une erreur frĂ©quente qui peut avoir des causes variĂ©es : backend surchargĂ©, requĂȘtes trop longues, problĂšmes rĂ©seau, ou simplement des timeouts mal configurĂ©s. MoniTao surveille vos endpoints et vous alerte immĂ©diatement lors d'erreurs 504.

Causes courantes de l'erreur 504

Le 504 indique toujours un problÚme de temps de réponse. Voici les causes les plus fréquentes à investiguer :

  • Backend surchargĂ© : le serveur applicatif est sous forte charge (CPU Ă  100%, mĂ©moire saturĂ©e, trop de requĂȘtes simultanĂ©es). Il ne peut pas traiter les requĂȘtes assez rapidement et certaines dĂ©passent le timeout.
  • Timeout proxy trop court : le timeout configurĂ© sur le proxy (Nginx, HAProxy, Cloudflare) est infĂ©rieur au temps de traitement normal de certaines requĂȘtes. C'est souvent le cas aprĂšs ajout de fonctionnalitĂ©s plus lentes.
  • RequĂȘtes base de donnĂ©es lentes : des requĂȘtes SQL non optimisĂ©es, des tables non indexĂ©es, ou des deadlocks peuvent bloquer l'application pendant de longues secondes, causant des timeouts.
  • ProblĂšme rĂ©seau : la connexion entre le proxy et le backend est instable, avec des pertes de paquets ou une latence excessive. Le backend rĂ©pond peut-ĂȘtre, mais la rĂ©ponse n'arrive pas Ă  temps.

OĂč survient le 504 dans votre architecture

Identifier le composant qui génÚre le 504 est la premiÚre étape du diagnostic :

  • Nginx → PHP-FPM : configuration classique LEMP. Le 504 survient quand le script PHP dĂ©passe le fastcgi_read_timeout de Nginx ou le request_terminate_timeout de PHP-FPM.
  • Cloudflare → Origin : Cloudflare impose des timeouts stricts (100s plan gratuit, jusqu'Ă  6000s Enterprise). Si votre serveur d'origine est plus lent, Cloudflare gĂ©nĂšre un 504.
  • Load Balancer → Backend : un backend du pool ne rĂ©pond plus ou est trop lent. Le load balancer timeout et peut retry sur un autre backend si configurĂ©.
  • API Gateway → Microservice : dans une architecture microservices, un service downstream peut ĂȘtre lent ou bloquĂ©, propageant des 504 en cascade Ă  travers la chaĂźne.

Solutions pour corriger l'erreur 504

La résolution dépend de la cause identifiée. Voici les approches les plus efficaces :

  • Augmenter les timeouts : si les requĂȘtes longues sont lĂ©gitimes, augmentez les timeouts du proxy. Attention : cela ne rĂ©sout pas le problĂšme de fond et peut masquer des problĂšmes de performance.
  • Optimiser le backend : analysez les requĂȘtes lentes (slow query log MySQL, APM), ajoutez des index, optimisez le code applicatif. C'est la solution durable.
  • ImplĂ©menter du caching : pour les requĂȘtes rĂ©pĂ©titives et coĂ»teuses, ajoutez une couche de cache (Redis, Memcached, Varnish) pour rĂ©duire la charge backend.
  • Passer en asynchrone : pour les opĂ©rations vraiment longues (gĂ©nĂ©ration de rapports, exports), utilisez un systĂšme de jobs asynchrones avec notification quand c'est prĂȘt.

Configuration des timeouts pour éviter les 504

Voici les configurations recommandées pour les différents composants de votre stack :

# Nginx - /etc/nginx/nginx.conf
location ~ \.php$ {
    fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
    fastcgi_read_timeout 300s;     # 5 minutes max
    fastcgi_send_timeout 300s;
    fastcgi_connect_timeout 60s;
}

# Pour un proxy vers un backend HTTP
location /api/ {
    proxy_pass http://backend;
    proxy_read_timeout 300s;
    proxy_connect_timeout 60s;
    proxy_send_timeout 300s;
}

# PHP-FPM - /etc/php/8.2/fpm/pool.d/www.conf
request_terminate_timeout = 300

# MySQL - Slow query log pour identifier les requĂȘtes lentes
slow_query_log = 1
long_query_time = 2

Ces configurations dĂ©finissent un timeout de 5 minutes, suffisant pour la plupart des opĂ©rations. Adaptez selon vos besoins spĂ©cifiques. Le slow query log MySQL aide Ă  identifier les requĂȘtes Ă  optimiser.

Surveillance des erreurs 504 avec MoniTao

MoniTao vous aide à détecter et résoudre rapidement les erreurs 504 :

  • DĂ©tection en temps rĂ©el : dĂšs qu'un endpoint retourne un 504, MoniTao le capture et entre en phase de vĂ©rification.
  • Mesure du temps de rĂ©ponse : chaque vĂ©rification enregistre le temps de rĂ©ponse. Vous pouvez identifier les endpoints qui approchent du timeout avant qu'ils ne cassent.
  • Alertes configurables : dĂ©finissez des seuils d'alerte non seulement sur le code de rĂ©ponse mais aussi sur le temps de rĂ©ponse (alerter si > 5s par exemple).
  • Historique de performance : analysez l'Ă©volution des temps de rĂ©ponse dans le temps pour dĂ©tecter les dĂ©gradations progressives avant qu'elles ne causent des 504.

Checklist de résolution rapide

  • Identifier quel composant gĂ©nĂšre le 504 (proxy, CDN, load balancer)
  • VĂ©rifier la charge du backend : top, htop, vmstat
  • Consulter les slow query logs de la base de donnĂ©es
  • Comparer les timeouts configurĂ©s avec les temps de rĂ©ponse rĂ©els
  • Tester le backend directement (sans passer par le proxy)
  • Monitorer aprĂšs correction pour confirmer la rĂ©solution

Questions fréquentes sur l'erreur 504

Quelle différence entre une erreur 502 et une erreur 504 ?

Le 502 Bad Gateway indique que le backend a répondu mais avec une réponse invalide ou mal formée. Le 504 Gateway Timeout indique que le backend n'a pas répondu du tout dans le temps imparti. Le 502 est un problÚme de contenu de réponse, le 504 est un problÚme de temps de réponse.

Comment augmenter le timeout sur Cloudflare ?

Le timeout Cloudflare dépend de votre plan : 100 secondes (Free/Pro), 600 secondes (Business), jusqu'à 6000 secondes (Enterprise). Pour les plans inférieurs, vous devez optimiser votre backend ou utiliser Cloudflare Workers pour des opérations longues.

Quel timeout configurer pour mon application ?

Un timeout de 30 secondes suffit pour 99% des requĂȘtes web normales. Au-delĂ , c'est gĂ©nĂ©ralement le signe d'un problĂšme de performance. Pour les opĂ©rations lĂ©gitimement longues (exports, rapports), prĂ©voyez des endpoints dĂ©diĂ©s avec des timeouts plus Ă©levĂ©s.

L'erreur 504 est-elle grave pour le SEO ?

Oui. Google interprÚte les 504 répétés comme un signe d'indisponibilité. Si Googlebot rencontre réguliÚrement des 504, cela peut affecter négativement le crawl et le classement de vos pages.

Comment savoir si c'est le proxy ou le backend qui timeout ?

Testez le backend directement sans passer par le proxy (curl sur l'IP locale ou le socket). Si le backend rĂ©pond correctement en direct mais pas via le proxy, c'est un problĂšme de configuration du proxy. Si le backend est lent mĂȘme en direct, c'est un problĂšme de performance applicative.

Peut-on configurer un retry automatique sur 504 ?

Oui, mais avec prudence. Nginx permet de configurer proxy_next_upstream pour retry sur un autre backend. Cependant, retrier des requĂȘtes POST peut causer des doublons. RĂ©servez le retry automatique aux requĂȘtes idempotentes (GET, HEAD).

Conclusion

L'erreur HTTP 504 Gateway Timeout signale un problĂšme de temps de rĂ©ponse dans votre infrastructure. La cause est gĂ©nĂ©ralement un backend surchargĂ©, des requĂȘtes trop lentes, ou des timeouts mal configurĂ©s. Le diagnostic passe par l'identification du composant fautif et l'analyse des temps de rĂ©ponse.

La solution durable consiste à optimiser les performances backend plutÎt qu'à simplement augmenter les timeouts. MoniTao vous aide en surveillant non seulement les codes de réponse mais aussi les temps de réponse, vous alertant avant que les problÚmes de performance ne deviennent des erreurs 504.

PrĂȘt Ă  dormir sur vos deux oreilles ?

Commencez gratuitement, sans carte bancaire.