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 :

Où survient le 504 dans votre architecture

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

Solutions pour corriger l'erreur 504

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

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 :

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.