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.
Liens utiles
PrĂȘt Ă dormir sur vos deux oreilles ?
Commencez gratuitement, sans carte bancaire.