429 Too Many Requests
En anglais : 429 Too Many Requests
Réponse rapide
Vous (ou un robot sur votre adresse IP) avez envoyé trop de requêtes en peu de temps : une limitation de débit (nginx, WAF, CDN, extension de sécurité) vous bloque. Patientez le temps indiqué par Retry-After, puis ajustez la règle.
La page répond « 429 Too Many Requests », ou un message équivalent d’un CDN ou d’une API (« Rate limit exceeded »). Ce n’est pas une panne : le serveur fonctionne, mais il refuse de traiter votre requête parce qu’il en a reçu trop, trop vite, depuis la même adresse IP, le même compte ou la même clé d’API.
L’erreur peut vous toucher en visiteur (un robot partage votre adresse, vous avez rechargé la page en rafale), en administrateur (tentatives de connexion répétées, outil de supervision trop zélé) ou en développeur (votre site interroge une API qui limite le nombre d’appels).
Ce que signifie cette erreur
Le code 429 est défini par la spécification HTTP pour la limitation de débit. WordPress le connaît (wp-includes/functions.php associe 429 à « Too Many Requests », et la classe WP_Http le déclare comme constante TOO_MANY_REQUESTS, dans wp-includes/class-wp-http.php), mais le cœur ne l’utilise qu’une fois : pour limiter les commentaires. Dans wp-includes/comment.php, wp_throttle_comment_flood() bloque un nouveau commentaire envoyé moins de 15 secondes après le précédent, et le visiteur lit « Vous envoyez vos commentaires trop rapidement. Prenez votre temps. » (wp_die() avec le code 429).
Partout ailleurs, le 429 vient de l’infrastructure ou d’un service tiers :
- nginx : une zone
limit_reqoulimit_connaveclimit_req_status 429(sans ce réglage, nginx répond 503 : voir la fiche erreur 503) ; - Un pare-feu applicatif ou un CDN qui applique des règles de limitation par adresse IP ou par chemin ;
- Une extension de sécurité WordPress qui bloque temporairement les IP après trop de tentatives de connexion ou de requêtes ;
- Votre hébergeur, qui plafonne les requêtes par seconde sur certaines offres ;
- Une API tierce (e-mailing, intelligence artificielle, recherche, géolocalisation) appelée par votre site : c’est WordPress qui reçoit le 429, et non le visiteur.
Diagnostic rapide
| Symptôme / constat | Cause probable | À vérifier |
|---|---|---|
| 429 dès la première requête, depuis un seul réseau | Votre IP (ou celle de votre réseau d’entreprise) est limitée ou bannie | Test depuis un autre réseau ; liste des bans (fail2ban, CDN, extension) |
| 429 après plusieurs rechargements rapides | Limitation de débit normale | En-tête Retry-After ; règle limit_req |
429 sur wp-login.php ou xmlrpc.php | Protection contre la force brute | Extension de sécurité ; règle du WAF |
429 sur admin-ajax.php ou l’API REST | Appels répétés d’un script du site ou d’une extension | Journal d’accès, nombre de requêtes par minute |
| Message « Vous envoyez vos commentaires trop rapidement » | Limite de commentaires de WordPress (15 secondes) | Délai entre deux commentaires ; extension anti-spam |
| Le 429 figure dans le journal PHP (réponse d’une API) | Quota ou débit de l’API tierce dépassé | En-tête Retry-After de l’API ; tableau de bord du service |
Les causes les plus fréquentes
- Des robots d’exploration (moteurs, outils SEO, robots d’entraînement d’IA) qui enchaînent les requêtes et épuisent le quota de leur IP ou de la vôtre.
- Une règle de limitation trop stricte sur nginx, le WAF ou le CDN, qui traite un visiteur légitime en rafale (chargement d’une page avec beaucoup de ressources) comme un abus.
- La protection anti-force brute qui bloque après des échecs de connexion répétés.
- Une extension ou un script qui boucle : appels répétés à
admin-ajax.php, à l’API REST ou à un service externe. - Un quota d’API tierce dépassé, par exemple après un import ou une campagne qui multiplie les appels.
- Une adresse IP partagée (réseau d’entreprise, VPN, NAT d’opérateur) dont un autre utilisateur a épuisé le quota.
Solutions pas à pas
Un 429 est temporaire par nature. Du moins invasif au plus technique :
1. Patienter, puis réessayer calmement
Lisez l’en-tête Retry-After quand il existe : il donne le nombre de secondes à attendre. Vous pouvez le voir avec :
curl -sI https://www.exemple.fr/wp-login.php | head -n 12
Attendez ce délai, évitez de recharger en rafale et déconnectez-vous d’un éventuel VPN. Si le blocage persiste, essayez depuis un autre réseau pour savoir si c’est votre adresse qui est en cause.
2. Identifier qui applique la limite
Le journal d’erreurs de nginx contient une ligne « limiting requests, excess: … by zone … » pour chaque requête rejetée, avec le nom de la zone ; cherchez-la, puis cherchez ce nom dans la configuration :
sudo grep -i 'limiting requests' /var/log/nginx/error.log | tail -n 5
sudo grep -rn 'limit_req' /etc/nginx/
# Quelles IP font le plus de requêtes ?
sudo awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
Si rien n’apparaît côté serveur, la limite vient d’un intermédiaire : consultez les journaux de sécurité du CDN, du WAF ou de l’extension de sécurité. Pour comprendre qui sont les visiteurs en rafale, lisez crawlers IA qui saturent le serveur.
3. Débloquer une adresse IP
Avec fail2ban, retirez l’adresse de la prison concernée :
sudo fail2ban-client status
sudo fail2ban-client set nom-de-la-prison unbanip 203.0.113.10
Avec un CDN, un WAF ou une extension de sécurité, ajoutez l’adresse à la liste d’autorisation dans l’interface. Si le message est « Forbidden » et non plus « Too Many Requests », il s’agit d’un blocage différent : voyez la fiche erreur 403. Sans accès à l’administration, désactivez l’extension de sécurité en renommant son dossier dans wp-content/plugins/ par SFTP, le temps de vous reconnecter.
4. Régler la limite nginx
Une limite doit absorber une page normale (HTML plus ressources). Utilisez une rafale (burst) cohérente, et répondez 429 plutôt que 503 pour que les clients sachent qu’il faut ralentir :
# bloc http
limit_req_zone $binary_remote_addr zone=wpm_req:10m rate=10r/s;
# bloc server
location / {
limit_req zone=wpm_req burst=30 nodelay;
limit_req_status 429;
try_files $uri $uri/ /index.php?$args;
}
Vérifiez avec sudo nginx -t, puis sudo systemctl reload nginx. Si votre propre supervision ou votre outil d’import dépasse la limite, donnez-lui une adresse en liste d’autorisation plutôt que d’augmenter la limite pour tout le monde.
5. Respecter le 429 d’une API tierce
Si c’est votre site qui reçoit le 429, ne réessayez pas immédiatement : cela aggrave la situation. Lisez Retry-After et reprogrammez l’appel :
$reponse = wp_remote_get( $url, array( 'timeout' => 15 ) );
if ( 429 === wp_remote_retrieve_response_code( $reponse ) ) {
$attente = (int) wp_remote_retrieve_header( $reponse, 'retry-after' );
$attente = max( 60, $attente ); // au moins une minute
wp_schedule_single_event( time() + $attente, 'mon_hook_reprise', array( $url ) );
return;
}
Une stratégie complète (attente exponentielle, file d’attente, plafond de reprises) est décrite dans 429 Too Many Requests d’une API de LLM. Si l’API de recherche ou d’e-mailing a un quota, mesurez votre consommation avant la prochaine campagne, comme dans Rate limit exceeded sur Algolia.
6. Traiter les commentaires en rafale
Le message « Vous envoyez vos commentaires trop rapidement » vient de WordPress. Le délai de 15 secondes est un garde-fou contre le spam. Si vos rédacteurs répondent à plusieurs commentaires de suite, prévenez-les d’attendre ; si vous gérez un site à fort trafic, vous pouvez remplacer le test via le filtre comment_flood_filter.
Prévenir l’erreur
- Renvoyez toujours 429 avec un en-tête
Retry-Afterplutôt qu’un 503 muet : les clients bien conçus ralentissent. - Calibrez les limites sur le chargement réel d’une page (HTML, scripts, images), pas sur une seule requête.
- Mettez vos propres outils (supervision, import, sauvegardes distantes) en liste d’autorisation.
- Mettez en cache les appels d’API tierces (transients) pour réduire le nombre de requêtes sortantes.
- Limitez les robots inutiles via
robots.txtet des règles par User-Agent avant de durcir les limites pour tous.
Combien de temps dure un blocage 429 ?
Cela dépend de la règle : de quelques secondes (limite par seconde) à plusieurs heures (bannissement par fail2ban ou par un CDN). L’en-tête Retry-After, quand il existe, donne la durée exacte.
Une erreur 429 est-elle un signe de piratage ?
Pas forcément. Elle peut signaler une attaque par force brute que votre protection a arrêtée, mais aussi un simple robot trop actif ou votre propre outil. Regardez les adresses IP et les URL dans le journal d’accès pour trancher.
Pourquoi mon site reçoit-il un 429 d’une API alors que j’envoie peu de requêtes ?
Plusieurs sites mutualisés peuvent partager la même adresse IP sortante, et certains plugins appellent l’API à chaque page vue. Mettez les réponses en cache et regroupez les appels.
Faut-il désactiver la limitation pour éviter le 429 ?
Non : elle protège votre site contre les abus. Réglez-la plutôt (rafale, liste d’autorisation, code 429 explicite) pour qu’elle ne gêne que les mauvais usages.