Erreur 504 Gateway Timeout : Diagnostic Complet

Comprendre et résoudre les timeouts entre proxy et backend.

L'erreur 504 Gateway Timeout indique que votre serveur proxy (Nginx, Apache, ou un load balancer) a attendu trop longtemps une réponse du backend sans jamais la recevoir. Le backend n'est pas nécessairement down - il est juste trop lent.

C'est une erreur insidieuse car elle signale souvent un problème de performance sous-jacent. Une requête qui prend 30 secondes aujourd'hui en prendra 60 demain si la cause n'est pas traitée. L'erreur 504 est le symptôme, pas la maladie.

Ce guide vous aide à diagnostiquer la cause profonde des timeouts et à mettre en place des solutions durables plutôt que de simplement augmenter les délais.

Comprendre l'Erreur 504 Gateway Timeout

L'erreur 504 se produit quand le délai d'attente est dépassé :

Causes Principales des Timeouts

Voici les causes les plus fréquentes d'une erreur 504 :

Étapes de Diagnostic

Pour identifier la cause d'un timeout :

  1. Identifier les requêtes lentes : Activez le slow query log de votre base de données. Les requêtes > 1 seconde sont des suspectes.
  2. Profiler l'application : Utilisez un APM (Blackfire, New Relic) pour voir où le temps est consommé : code, DB, appels externes.
  3. Vérifier les appels externes : Loggez le temps des appels API. Une API tierce défaillante peut bloquer toute votre application.
  4. Analyser les patterns : La 504 arrive-t-elle sur des pages spécifiques ? À certaines heures ? Sous forte charge ? Les patterns révèlent la cause.
  5. Reproduire le problème : Identifiez une URL qui timeout de manière reproductible. C'est votre cas de test pour valider les corrections.

Commandes de Diagnostic

Voici les commandes pour investiguer les timeouts :

# Activer le slow query log MySQL
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 1;
SHOW VARIABLES LIKE "slow_query_log_file";

# Analyser les requêtes lentes
mysqldumpslow /var/log/mysql/slow.log | head -20

# Vérifier les processus MySQL actifs
mysql -e "SHOW FULL PROCESSLIST;" | grep -v Sleep

# Vérifier les workers PHP-FPM occupés
SCRIPT_NAME=/status SCRIPT_FILENAME=/status REQUEST_METHOD=GET cgi-fcgi -bind -connect /var/run/php/php-fpm.sock

# Timeout dans les logs Nginx
grep "upstream timed out" /var/log/nginx/error.log | tail -20

# Mesurer le temps de réponse d'une page
time curl -s -o /dev/null -w "%{time_total}" https://example.com/slow-page

Le slow query log est votre premier allié. La plupart des timeouts viennent de requêtes SQL non optimisées. Les commandes curl permettent de mesurer et comparer.

Solutions Selon la Cause

Appliquez la solution correspondant à votre diagnostic :

Prévention des Timeouts

Évitez les futurs timeouts avec ces bonnes pratiques :

Checklist Diagnostic 504

  • Activer et analyser le slow query log
  • Identifier les pages/endpoints qui timeout
  • Vérifier les appels API externes et leurs timeouts
  • Contrôler la charge des workers backend
  • Profiler le code des pages lentes
  • Mettre en place du monitoring temps de réponse

Questions Fréquentes

Dois-je simplement augmenter le timeout ?

C'est une solution temporaire, pas une vraie fix. Augmenter le timeout masque le problème qui va empirer. Optimisez d'abord, augmentez ensuite si vraiment nécessaire.

Comment configurer un timeout par page ?

Dans Nginx, utilisez des blocs location avec différents proxy_read_timeout. Les pages d'export peuvent avoir 300s, les pages normales 60s.

Le timeout 504 affecte-t-il le SEO ?

Oui, Google pénalise les sites lents. De plus, si le crawler reçoit des 504 régulièrement, il réduira la fréquence d'exploration et votre indexation souffrira.

Comment détecter les timeouts avant les utilisateurs ?

Configurez un monitoring avec MoniTao et des seuils de temps de réponse. Une alerte à 5 secondes vous prévient avant que ça ne timeout à 60 secondes.

Puis-je retourner une réponse partielle au lieu de 504 ?

Non, HTTP ne permet pas ça. Mais vous pouvez implémenter un pattern où vous retournez immédiatement une page avec un spinner qui poll pour le résultat.

Les 504 sont-elles loggées côté application ?

Pas toujours. Le proxy coupe la connexion mais l'application peut continuer à traiter. Loggez le temps de traitement côté application pour corréler.

Conclusion

L'erreur 504 Gateway Timeout est le signe que votre application a besoin d'attention. Elle révèle des problèmes de performance qui, ignorés, vont s'aggraver avec la croissance du trafic.

MoniTao vous aide à détecter ces problèmes tôt grâce au monitoring du temps de réponse. Configurez des alertes progressives : warning à 3 secondes, critical à 10 secondes. Vous aurez le temps d'agir avant le timeout.

Prêt à dormir sur vos deux oreilles ?

Commencez gratuitement, sans carte bancaire.