Codes de statut 5xx expliqués : quand votre serveur est le problème
Un code de statut 5xx signifie que votre infrastructure a échoué, pas la requête du visiteur. Le serveur a accepté la requête, l'a comprise, puis n'a pas pu produire de réponse valide, donc chaque 5xx sur votre site est un incident qui vous appartient.
Ce qui distingue les 5xx des 4xx
La RFC 9110 définit les 5xx comme « Server Error » : le serveur sait qu'il a commis une erreur ou est incapable d'exécuter la méthode demandée. C'est toute la distinction. Un 404 dit « il n'y a rien ici ». Un 500 dit « il y a quelque chose ici et je me suis cassé en le produisant ».
Deux conséquences en découlent. D'abord, un 5xx est généralement rejouable, car la même requête peut très bien réussir une seconde plus tard une fois que le composant en échec se rétablit. Ensuite, les moteurs de recherche traitent un 5xx comme un signal temporaire et ralentissent l'exploration plutôt que de désindexer immédiatement, tandis qu'un 5xx persistant sur plusieurs jours finit quand même par vous coûter des pages indexées.
Quel maillon a échoué
Lisez un code 5xx comme une carte de l'endroit où la requête est morte. Presque tous les sites modernes placent au moins un proxy devant l'application, donc le code vous dit de quel côté de cette frontière l'échec s'est produit.
| Code | Qui l'a produit | Ce qui s'est passé |
|---|---|---|
| 500 Internal Server Error | L'application elle-même | Exception non gérée ou condition inattendue à l'intérieur de l'application |
| 501 Not Implemented | Le serveur | La méthode de requête n'est pas prise en charge du tout |
| 502 Bad Gateway | Le proxy, le CDN ou le répartiteur de charge | Le backend a répondu, mais avec quelque chose d'invalide, ou a fermé la connexion |
| 503 Service Unavailable | Le serveur ou le proxy, délibérément | Surchargé ou en maintenance, et refusant le travail exprès |
| 504 Gateway Timeout | Le proxy, le CDN ou le répartiteur de charge | Le backend n'a jamais répondu à temps |
| 505 HTTP Version Not Supported | Le serveur | La version du protocole dans la requête n'est pas prise en charge |
502, 503 et 504 portent la plus grande valeur diagnostique, car chacun nomme un échec différent du même backend : réponse invalide, réponse refusée, aucune réponse. Le guide du 502 Bad Gateway couvre le premier d'entre eux en profondeur, y compris les lignes de journal de proxy qui identifient la faute exacte.
Causes courantes derrière les réponses 5xx
- Plantages d'application. Une exception non gérée, une connexion à la base de données échouée ou une valeur nulle à un endroit inattendu produit un 500 sur toutes les routes qui touchent le chemin de code cassé.
- Processus backend non actif. Un serveur d'application arrêté, un pool PHP-FPM mort ou un conteneur qui a échoué sa vérification de santé ne donne rien au proxy avec qui parler, ce qui se manifeste par un 502.
- Épuisement des ressources. Mémoire insuffisante, descripteurs de fichiers épuisés, threads de travail épuisés ou connexions à la base de données épuisées. Commence généralement par des erreurs intermittentes sous charge avant de devenir constant.
- Dépendances lentes. Une requête lente, une API tierce lente ou un démarrage à froid pousse le temps de réponse au-delà du délai d'expiration du proxy et se transforme en 504.
- Déploiements et redémarrages. Toute fenêtre où l'ancien processus s'est arrêté et où le nouveau n'a pas encore commencé à servir produit une rafale de 502 ou de 503.
- Erreurs de configuration. Une adresse amont erronée, une mauvaise configuration TLS entre le proxy et le backend, ou une incompatibilité de protocole comme parler HTTP à un port HTTPS.
- Disque plein. Une cause sous-estimée. Les journaux ou fichiers temporaires remplissent le volume, les sessions ou caches cessent d'écrire, et l'application commence à échouer de façons qui paraissent aléatoires.
Comment travailler sur un 5xx
- Confirmez le code et son origine. Récupérez les en-têtes directement et regardez quel composant a signé la réponse :
Un en-têtecurl -sS -o /dev/null -D - https://example.com/Server:ou de CDN sur l'erreur vous dit si c'est la périphérie ou l'origine qui l'a générée. - Testez l'origine directement, en contournant le proxy. Si le backend répond 200 sur son propre port pendant que l'URL publique répond 502, la faute est dans la couche proxy ou dans le lien entre les deux.
- Lisez ensuite le journal d'erreurs du proxy, pas le journal de l'application. Les proxys inverses nomment l'échec précisément, par exemple
connect() failed (111: Connection refused)ouupstream timed out, ce qui sépare immédiatement « backend hors service » de « backend lent ». - Puis lisez le journal de l'application. Pour un 500, la trace de pile est la réponse. Pour 502 et 504, l'application ne journalise souvent rien du tout, et cette absence est elle-même informative.
- Vérifiez les ressources sur l'hôte. Mémoire, disque, nombre de connexions et saturation des travailleurs. Un 5xx intermittent sous trafic est presque toujours une limite atteinte.
- Regardez ce qui a changé. Les déploiements, les poussées de configuration, les renouvellements de certificats et les mises à jour de dépendances expliquent une grande part des apparitions soudaines de 5xx.
Détecter les erreurs 5xx intermittentes
Les erreurs 5xx sont souvent intermittentes, ce qui les rend difficiles à attraper à la main : la page que vous rechargez fonctionne, et celle que votre client a chargée non. Une vérification HTTP programmée s'exécute en continu et échantillonne le site bien plus souvent que vous ne le pourriez, de sorte qu'une série d'erreurs devienne visible comme un schéma plutôt que comme des plaintes éparses. Vérifier depuis de nombreux emplacements distingue aussi une vraie panne serveur d'un problème de routage ou de périphérie qui n'affecte qu'une partie du monde, c'est pourquoi la surveillance de disponibilité distribuée utilise des points de contrôle répartis à travers les régions plutôt qu'un seul point de vue. Si le code en échec s'avère être 403, 404 ou 429 à la place, la requête n'a jamais atteint un backend cassé, et le guide de la famille 4xx est le bon point de départ.