Aller au contenu
SécuritéWP — Accueil
Tutoriel WordPress

Erreur 503 sur WordPress : d'où elle vient et comment la corriger

Publié le · Mis à jour le · 10 min de lecture· Par

Erreur 503 sur WordPress : d'où elle vient et comment la corriger
Sommaire
  1. Ce que veut dire exactement « 503 Service Unavailable »
  2. Pourquoi un site WordPress renvoie une erreur 503
  3. Ne pas confondre 503, 500, 502, 504 et 429
  4. Le cas Cloudflare : 503, 522 et 524
  5. Diagnostic : trouver la cause en dix minutes
  6. Corriger l'erreur 503 selon la cause
  7. Le cas particulier des boutiques WooCommerce
  8. Quand l'erreur 503 cache un piratage
  9. Empêcher l'erreur 503 de revenir
  10. Quand faire appel à nous
  11. Sources

En bref : une erreur 503 veut dire que le serveur est temporairement incapable de répondre, pas que votre site a disparu. Sur WordPress, les causes les plus fréquentes sont les processus PHP tous occupés, une extension ou un thème qui bloque l'exécution, et un fichier .maintenance resté en place après une mise à jour. Dans l'ordre : cherchez .maintenance à la racine, lisez le journal d'erreurs de l'hébergeur, puis désactivez les extensions en masse pour isoler celle qui bloque.

Ce que veut dire exactement « 503 Service Unavailable »

Le code 503 est défini par la norme HTTP, la RFC 9110 publiée en juin 2022 par l'IETF. Sa section 15.6.4 est sans ambiguïté : le code 503 indique que le serveur est actuellement incapable de traiter la requête en raison d'une surcharge temporaire ou d'une maintenance planifiée, ce qui sera probablement résolu après un certain délai. Le serveur peut ajouter un en-tête Retry-After qui suggère combien de temps attendre avant de réessayer.

Deux mots comptent : temporaire et serveur. Un 503 n'est jamais un problème de navigateur, de nom de domaine ou de contenu de page : la requête est arrivée jusqu'à une machine qui a répondu, mais qui a refusé de faire le travail. La même RFC ajoute une note utile, l'existence du code 503 n'oblige pas un serveur surchargé à l'utiliser, certains se contentent de refuser la connexion.

Erreur 503

Réponse HTTP d'un serveur qui a reçu la requête mais ne peut pas la traiter maintenant. Sur un hébergement WordPress, ce serveur peut être le serveur web (Apache, nginx, LiteSpeed), le gestionnaire de processus PHP, un répartiteur de charge, un pare-feu applicatif, ou WordPress pendant une mise à jour.

Selon la couche qui répond, le message change mais le code reste le même : « 503 Service Unavailable », « Service temporairement indisponible », ou « Briefly unavailable for scheduled maintenance » quand c'est WordPress qui parle et non le serveur.

Pourquoi un site WordPress renvoie une erreur 503

Tous les processus PHP sont occupés

C'est la cause la plus courante sur un hébergement mutualisé ou un VPS mal dimensionné. PHP-FPM, le gestionnaire de processus qui exécute WordPress, dispose d'un nombre fini d'ouvriers, réglé par la directive pm.max_children. Le manuel PHP la décrit comme la limite du nombre de requêtes simultanées qui seront servies. Quand toutes les places sont prises, les requêtes suivantes attendent, puis le serveur web abandonne et renvoie un 503.

Ce qui remplit ces places, ce sont des requêtes lentes : page non mise en cache, import de produits, sauvegarde lancée en journée, robot qui parcourt des milliers d'URL de filtres.

Une extension ou un thème bloque l'exécution

Un code PHP qui appelle une API externe sans délai maximal, qui boucle sur une requête SQL non indexée ou qui plante en cours de route gèle le processus qui l'exécute. Multipliez par le nombre de visiteurs et vous retombez sur le point précédent. C'est pour cela qu'un 503 apparaît si souvent juste après une mise à jour d'extension ou l'ajout d'un extrait de code dans functions.php.

WP-Cron s'emballe

WordPress n'utilise pas le planificateur du système : il déclenche ses tâches planifiées à l'occasion des visites. La documentation officielle le dit sans détour, WordPress exécute WP-Cron à chaque chargement de page, ce qui contribue à une consommation supplémentaire de ressources. Sur un site chargé, ou quand une tâche échoue et se replanifie en boucle, wp-cron.php finit par consommer à lui seul les processus disponibles.

Le mode maintenance de WordPress est resté bloqué

Pendant une mise à jour, WordPress crée un fichier .maintenance à la racine du site. Tant qu'il est là, la fonction wp_maintenance() du cœur envoie un en-tête Retry-After: 600 puis coupe la page avec un code 503 et le message « Briefly unavailable for scheduled maintenance ». Si la mise à jour s'interrompt, le fichier n'est jamais supprimé et le site reste bloqué.

Le cœur prévoit toutefois une sortie automatique : wp_is_maintenance_mode() considère la maintenance terminée si l'horodatage inscrit dans le fichier a plus de dix minutes. Si le message dure depuis une heure, le blocage vient d'ailleurs.

Une attaque ou un pic de trafic

Une attaque par force brute sur wp-login.php, un martèlement de xmlrpc.php ou un déni de service applicatif produisent le même symptôme qu'un succès commercial soudain. La différence se lit dans les journaux d'accès, pas sur la page d'erreur.

L'hébergeur limite, suspend ou maintient

Beaucoup d'hébergements mutualisés appliquent un quota d'entrées de processus ou de CPU et renvoient un 503 quand il est dépassé. Un compte suspendu pour malware ou envoi de spam peut lui aussi être servi en 503, tout comme une vraie maintenance planifiée. Dans ces trois cas, aucune manipulation dans WordPress ne changera rien : la réponse est dans votre espace client.

Un 503 qui va et vient est un signal, pas un détail

Une erreur 503 qui apparaît quelques minutes puis disparaît, plusieurs fois par jour, est le symptôme classique d'une saturation périodique : sauvegarde programmée, robot d'indexation agressif, tâche planifiée en boucle, ou début d'attaque. Tant que la cause n'est pas identifiée, elle grossit.

Ne pas confondre 503, 500, 502, 504 et 429

Ces cinq codes tombent tous du côté serveur et se ressemblent pour un visiteur, mais ils ne se corrigent pas de la même façon.

CodeCe qu'il signifieOù chercher en premier
500Erreur interne : le script a plantéJournal d'erreurs PHP, .htaccess, extension récente
502Passerelle invalide : réponse illisible de PHPPHP-FPM redémarré ou tombé, mémoire épuisée
503Service indisponible : pas de capacité pour répondreProcessus PHP saturés, .maintenance, quota
504Délai de passerelle dépassé : PHP répond trop tardRequête SQL lente, appel externe sans délai maximal
429Trop de requêtes : limitation volontairePare-feu, limitation de débit, robot trop rapide

Un guide est consacré à l'erreur 500, à l'erreur 502 Bad Gateway et à l'erreur 504 Gateway Timeout. Si vous ignorez encore à quelle panne vous avez affaire, partez du panorama des pannes WordPress les plus fréquentes.

Le cas Cloudflare : 503, 522 et 524

Si votre domaine passe par Cloudflare, la page d'erreur peut être produite par Cloudflare et non par votre hébergeur. La documentation donne un critère de tri simple pour le 503 : si le corps HTML de la réponse contient cloudflare ou cloudflare-nginx, un problème de connectivité s'est produit dans un centre de données Cloudflare. Sinon, l'erreur vient de votre serveur d'origine, et Cloudflare recommande alors de demander à l'hébergeur s'il applique une limitation de débit sur les requêtes vers ce serveur.

Deux codes voisins sont souvent pris pour des 503 alors qu'ils décrivent autre chose. Le 522 signifie que Cloudflare n'a pas réussi à joindre le serveur d'origine ; la documentation cite deux délais, 19 secondes sans réponse SYN+ACK avant l'établissement de la connexion TCP et 90 secondes sans accusé de réception après, avec pour causes classiques des adresses IP Cloudflare bloquées par le pare-feu de l'origine ou une adresse IP erronée dans le DNS. Le 524 signifie que Cloudflare a bien joint l'origine, mais que celle-ci n'a pas fourni de réponse HTTP avant le délai par défaut de 125 secondes : c'est un traitement trop long, pas une saturation.

Avant de toucher à WordPress, basculez l'enregistrement en mode « DNS only » quelques minutes : si l'erreur change de forme, vous savez de quel côté chercher.

Diagnostic : trouver la cause en dix minutes

  1. Vérifiez que le 503 est bien un 503, le navigateur affichant parfois une page de cache : curl -sSI https://votre-site.fr/ | head -n 20 donne le code réel et les en-têtes Server, Retry-After, cf-ray.
  2. Cherchez le fichier de maintenance. En SFTP ou en SSH, à la racine du site : ls -la .maintenance. S'il existe, notez sa date puis supprimez-le.
  3. Lisez le journal d'erreurs, souvent sous logs/error.log : une ligne server reached pm.max_children ou Resource temporarily unavailable désigne la saturation des processus.
  4. Regardez le journal d'accès et comptez les requêtes par adresse IP sur la dernière heure : un client qui martèle xmlrpc.php se voit immédiatement.
  5. Activez le journal de débogage. Dans wp-config.php, passez WP_DEBUG et WP_DEBUG_LOG à true et WP_DEBUG_DISPLAY à false : debug.log est écrit dans wp-content. Retirez ces lignes ensuite.
  6. Isolez l'extension fautive en renommant le dossier des extensions.
  7. Vérifiez auprès de l'hébergeur : page de statut, espace client, tickets. Si le compte est limité ou suspendu, le reste est inutile.

Corriger l'erreur 503 selon la cause

Supprimer le fichier de maintenance

À la racine du site, en SFTP ou en SSH :

ls -la .maintenance
rm .maintenance

Rechargez, puis terminez proprement les mises à jour interrompues. Si le message revient à chaque tentative, c'est la mise à jour qui échoue et non le fichier : voyez notre guide pour rétablir un site bloqué en mode maintenance.

Désactiver les extensions sans accès à l'administration

En SSH avec WP-CLI :

wp plugin deactivate --all
wp plugin activate <nom-de-l-extension>

Sans WP-CLI, en SFTP, renommez simplement le dossier :

mv wp-content/plugins wp-content/plugins-hs

Le site redevient accessible si une extension était en cause. Recréez un dossier plugins et remettez-les une par une, en rechargeant entre chaque. Même méthode pour le thème : renommez son dossier dans wp-content/themes, WordPress bascule seul sur un thème par défaut.

Reprendre la main sur WP-Cron

Désactivez le déclenchement par les visites et confiez les tâches au planificateur du serveur, comme le recommande la documentation WordPress. Dans wp-config.php :

define( 'DISABLE_WP_CRON', true );

Puis une tâche planifiée côté serveur, par exemple toutes les quinze minutes :

*/15 * * * * curl -s https://votre-site.fr/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Listez ensuite les tâches en attente avec wp cron event list et supprimez celles qui se replanifient en boucle : notre guide pour sécuriser ou désactiver wp-cron.php détaille les pièges.

Donner de l'air à PHP, mais dans le bon ordre

La documentation WordPress indique que le cœur tente d'allouer 40 Mo à PHP pour un site simple et 64 Mo en multisite : c'est peu. Vous pouvez relever WP_MEMORY_LIMIT et WP_MAX_MEMORY_LIMIT dans wp-config.php, sans jamais dépasser la limite fixée par l'hébergeur.

En revanche, augmenter pm.max_children sans augmenter la mémoire déplace le problème vers un plantage mémoire. Avant de payer plus cher, agissez sur la demande : cache de pages, cache d'objets, requêtes SQL lourdes repérées avec Query Monitor, sauvegardes déplacées la nuit.

Le cas particulier des boutiques WooCommerce

Une boutique cumule tout ce qui produit des 503 : pages non cachables, filtres qui explosent en combinaisons d'URL, tâches planifiées d'abonnement ou de stock, passerelles de paiement qui rappellent le site. Excluez du cache les seules pages panier, commande et compte, et programmez imports et exports la nuit. Vérifiez surtout les notifications de paiement : un 503 sur une URL de rappel fait perdre des commandes payées sans trace dans l'administration.

Quand l'erreur 503 cache un piratage

Un site compromis consomme des ressources : envoi de spam en masse, pages générées à la volée pour les moteurs, minage, scan de sites voisins. La saturation est alors le symptôme, pas la maladie. Quatre indices doivent vous alerter :

  • Le 503 est apparu sans mise à jour ni changement de votre part.
  • Les journaux montrent des requêtes POST répétées vers un fichier PHP inconnu, souvent dans wp-content/uploads.
  • L'hébergeur vous écrit à propos de courrier sortant ou d'une charge anormale.
  • Des fichiers du cœur ont une date de modification récente alors que vous n'avez rien mis à jour.

Remettre le site en ligne sans nettoyer relance seulement le compte à rebours. Notre service de suppression de virus WordPress prend le relais si vous préférez déléguer.

Avant toute manipulation, sauvegardez

Fichiers et base de données, y compris dans l'état cassé. C'est ce qui permet de revenir en arrière si une correction aggrave la situation, et sert de preuve si l'hébergeur demande des éléments.

Empêcher l'erreur 503 de revenir

  • Un cache de pages, qui divise le nombre de processus PHP mobilisés par visiteur.
  • Une surveillance de disponibilité qui prévient en quelques minutes, plutôt qu'un client mécontent le lendemain.
  • Une limitation des tentatives de connexion et la désactivation de xmlrpc.php s'il n'est pas utilisé.
  • Des mises à jour précédées d'une sauvegarde restaurable.
  • Un hébergement dimensionné pour votre trafic réel, mesuré et non estimé.

Quand faire appel à nous

Si le site est hors ligne depuis plusieurs heures, si l'erreur revient après chaque correction, ou si vous n'avez pas accès aux journaux, chercher coûte vite plus cher qu'intervenir. Sécurité WP répare des sites WordPress depuis 2016 : diagnostic gratuit sous 12 heures, réparation à prix fixe de 350 euros annoncée avant intervention et remboursée si elle échoue, site traité sous 48 heures. Joignez-nous au +33 7 56 81 94 38 ou par notre page dépannage WordPress. Notre offre Assurance et maintenance est à 50 euros par mois.

Sources

Votre site est touché ?

Nous intervenons sur les sites WordPress piratés, nettoyage et sécurisation compris. Décrivez votre situation, nous vous répondons.

À lire aussi