504 Gateway Timeout : le serveur a mis trop de temps à répondre

« 504 Gateway Timeout ». Le message est sec, mais son sens est précis : un serveur en attendait un autre, et la réponse n’est jamais arrivée à temps. Contrairement à une page blanche mystérieuse, cette erreur vous dit quelque chose d’utile — quelque part, une opération est trop lente.

Quand vous chargez WordPress, un serveur frontal (Nginx, ou un proxy comme Cloudflare) transmet la requête à PHP, qui interroge la base de données, exécute vos plugins, assemble la page, puis renvoie le tout. Si cette chaîne dépasse le délai maximum autorisé, le frontal cesse d’attendre et renvoie une 504. Le site n’est pas « cassé » au sens d’une erreur 500 : il est simplement trop lent pour répondre dans les temps.

La bonne nouvelle : une 504 est presque toujours un problème de performance, donc traitable. La différence avec une erreur 502 est subtile mais utile — une 502 vient d’une réponse invalide ou d’un service tombé, une 504 vient d’une réponse qui arrive trop tard.

Pourquoi ça arrive : ce qui ralentit la réponse


1. Rechargez et vérifiez si c’est ponctuel

Un pic de charge temporaire peut suffire à déclencher une 504. Attendez une minute, rechargez avec le cache vidé (Ctrl+Shift+R), et voyez si l’erreur revient.

Testez plusieurs pages : si seule une page précise déclenche la 504 (le panier, une page de recherche, un export dans l’admin), vous tenez déjà le coupable — c’est cette opération-là qui est trop lente, pas le site entier. Notez laquelle : ça oriente tout le diagnostic.


2. Identifiez l’opération lente

Une 504 ciblée sur une action précise est un cadeau : elle vous montre où chercher.

Si votre site est lent partout et pas seulement en 504, le guide site WordPress lent détaille le diagnostic de performance complet.


3. Augmentez les timeouts et les directives PHP

Pour les opérations légitimement longues (un gros import, une sauvegarde), la solution est d’accorder plus de temps. Mais attention : ces réglages doivent être cohérents entre PHP et le serveur frontal, sinon vous ne faites que déplacer le point de rupture.

DirectiveRôleSymptôme si trop basseValeur de départ
max_execution_timeDurée max d’exécution d’un script PHP504 sur import, sauvegarde, migration300
max_input_timeTemps max pour recevoir les données d’une requête504 sur upload volumineux300
memory_limitRAM allouée par script PHPScript tué avant la fin256M
fastcgi_read_timeout (Nginx)Délai d’attente de la réponse PHP par Nginx504 alors que PHP tourne encore300s
proxy_read_timeout (proxy/Cloudflare)Délai côté proxy amont504 renvoyée par le proxy300s

Où régler quoi :

Pour le détail de chaque directive et les quatre endroits où les modifier proprement, voir le guide directives PHP WordPress.


4. Traquez la requête base de données coupable

Si la lenteur est globale, la base de données est souvent en cause. Installez un plugin de profilage (Query Monitor) sur un environnement de test : il affiche, pour chaque page, les requêtes SQL les plus lentes et le plugin qui les déclenche.

Les coupables classiques : une table wp_options gonflée par des données autoload inutiles, une table wp_postmeta sans index sur un gros site, ou un plugin qui recharge tout le catalogue à chaque visite. Une fois le coupable identifié, deux options : optimiser (nettoyer les données, ajouter un index) ou remplacer le plugin par une alternative plus légère.


5. Maîtrisez le cron WordPress

Par défaut, WordPress déclenche ses tâches planifiées (wp-cron) à chaque visite. Sur un site à faible trafic, ça passe ; sur un site chargé, ou avec beaucoup de tâches, elles s’empilent et une visite malchanceuse hérite de toute la file — 504.

La solution propre : désactiver le cron « à la visite » et le déclencher via une vraie tâche planifiée serveur. Dans wp-config.php :

define('DISABLE_WP_CRON', true);

Puis créez une tâche cron côté hébergeur qui appelle wp-cron.php toutes les 5 à 15 minutes. Le traitement des tâches est ainsi découplé de l’expérience des visiteurs. Notez que si vos 504 s’accompagnent d’erreurs 429 Too Many Requests, le cron mal réglé peut être la cause commune.


6. Mettez en place du cache

Si le serveur recalcule chaque page à chaque visite, vous multipliez les occasions de 504. Un cache de pages (statique) sert une version pré-générée en quelques millisecondes, sans solliciter PHP ni la base.

Activez un plugin de cache (WP Super Cache, W3 Total Cache, ou le cache intégré de votre hébergeur), et, si possible, un cache objet (Redis) pour les requêtes base répétées. C’est le levier au meilleur rapport effort/gain contre les 504 dues à la charge.


Tableau récapitulatif : cause → solution

Cause probablePremier testSolution
Pic temporaireRecharger après 1 minSouvent auto-résolu
Opération admin longue504 sur import/exportAugmenter max_execution_time, fractionner
Requête SQL lenteQuery MonitorOptimiser ou remplacer le plugin
Cron empilé504 aléatoiresDésactiver wp-cron, cron serveur
Charge serveurLent aux heures de pointeCache de pages + montée en gamme
Timeout proxy504 renvoyée par CloudflarePasser l’opération en tâche de fond

504 ou 502 : comment savoir laquelle je regarde ?

Le navigateur affiche le code exact dans le message. Une 504 Gateway Timeout signifie que la réponse est arrivée trop tard (lenteur). Une 502 Bad Gateway signifie que la réponse était invalide ou que le service applicatif ne répondait pas du tout. Sur une 504, on optimise la performance ; sur une 502, on vérifie d’abord que le service PHP tourne. Les deux partagent le réglage des timeouts.

Mon import de produits WooCommerce déclenche systématiquement une 504 — que faire ?

C’est un cas d’école : l’import est légitimement long et dépasse le temps alloué. Deux approches. Soit vous augmentez max_execution_time et les timeouts serveur le temps de l’import, soit — plus robuste — vous fractionnez le fichier en lots plus petits (par exemple 200 produits à la fois). Les gros imports gagnent toujours à être découpés.

Le site est rapide en journée mais tombe en 504 le soir — pourquoi ?

C’est la signature d’un hébergement mutualisé saturé aux heures de pointe : vous partagez les ressources avec d’autres sites, et le soir tout le monde consomme en même temps. Le cache réduit fortement le problème en évitant de recalculer les pages. Si ça persiste malgré le cache, c’est le signal qu’il faut un hébergement dédié ou infogéré.

Un plugin fait un appel externe qui bloque tout — comment le repérer ?

Query Monitor affiche aussi les requêtes HTTP sortantes et leur durée. Si vous voyez un appel à une API tierce qui prend plusieurs secondes, c’est votre point de blocage. La bonne pratique côté développeur est de rendre ces appels asynchrones ou de les mettre en cache — en attendant, désactivez le plugin concerné pour confirmer.


Quand passer la main à un pro

Une 504 récurrente après avoir réglé les timeouts, ajouté du cache et vérifié le cron indique un problème de fond : base mal structurée, plugins trop lourds, ou hébergement inadapté à votre trafic. Optimiser durablement demande de profiler, de réécrire ou remplacer les points chauds, et parfois de repenser l’architecture — un travail qu’un prestataire mène en quelques heures là où l’essai-erreur en prend des dizaines. Pour poser vous-même les bases d’un site rapide, le guide complet d’optimisation WordPress rassemble les leviers durables. Une 504, ce n’est pas une fatalité — c’est un site qu’on n’a pas encore mis au bon régime.

Ce problème, Peechy s'en occupe

Plutôt que de tout gérer seul, confiez votre site à une agence qui s'occupe de tout — hébergement, sécurité, maintenance et corrections. Encore plus simple en abonnement : on règle les soucis avant même que vous les remarquiez.

Confier mon site à Peechy