Erreur 500 : trouver la cause dans les journaux du serveur
Repérez la cause réelle d’une erreur 500 en lisant les logs Apache, Nginx, PHP-FPM et système, puis vérifiez…
Apprenez à lire une erreur 502 bad gateway, identifier l'upstream fautif et distinguer service arrêté, saturation ou délai dépassé.
Un 502 bad gateway n’est pas une panne vague du site. Par définition, c’est une erreur passerelle : le serveur de façade, souvent Nginx ou Apache en proxy, a interrogé un service en amont et n’a pas obtenu de réponse exploitable. Pour corriger une erreur 502, il faut donc remonter la chaîne réelle, lire le journal qui nomme l’upstream concerné, puis vérifier si le service est arrêté, saturé ou simplement trop lent.
Sur un Serveur, cette distinction évite de perdre du temps à inspecter le mauvais composant. Une erreur 502 nginx, par exemple, ne dit pas automatiquement que Nginx est cassé : elle dit souvent que ce qui est derrière lui répond mal, ou ne répond plus.
Un site web moderne repose souvent sur plusieurs couches :
Le point clé est simple : la réponse HTTP 502 est renvoyée par la passerelle qui n’a pas obtenu une réponse valide de son upstream. Si Nginx écoute sur le port 443, puis transmet vers un socket Unix PHP-FPM ou vers un port TCP applicatif, le journal d’erreur de Nginx indique en général l’élément précis en cause : socket introuvable, connexion refusée, en-tête invalide, délai dépassé.
Avant de modifier la configuration, commencez par identifier le rôle de chaque brique. Si le parcours du trafic n’est pas clair, comprendre les bases du réseau aide à distinguer ce qui relève du proxy, du DNS, du NAT et du service applicatif. Si un CDN est placé en amont, le rôle d’un CDN dans la chaîne de diffusion compte aussi, car un 502 peut être généré à plusieurs niveaux.
Le premier réflexe d’administration n’est pas de redémarrer au hasard. Il faut lire le journal d’erreur du serveur qui a émis la réponse 502. C’est lui qui sait quel upstream a été contacté, sur quel socket ou quel port, et à quel moment l’échec s’est produit.
Dans une pile Nginx, les messages typiques contiennent souvent :
Le journal donne plus qu’un code : il nomme le coupable probable. C’est la différence entre une recherche méthodique et une suite de redémarrages. Si vous devez aussi diagnostiquer une erreur 500 dans les journaux du serveur, gardez en tête que le raisonnement n’est pas le même : ici, la façade accuse un service amont, elle ne plante pas forcément elle-même.
| message dans le journal | ce qui a lâché | quoi vérifier |
|---|---|---|
| connect() failed (111: Connection refused) | service en amont arrêté ou n’écoutant pas sur le bon port | état du service, port d’écoute, correspondance avec la configuration du proxy |
| connect() to unix:… failed (2: No such file or directory) | socket Unix absent | création du socket, chemin configuré des deux côtés, droits d’accès |
| upstream timed out | service trop lent ou saturé | charge CPU, mémoire, files de workers, durée des requêtes, délais de proxy |
| upstream sent invalid header | application qui répond mal ou se termine trop tôt | journal applicatif, version du runtime, entêtes générés, erreurs fatales |
| recv() failed | connexion coupée pendant la réponse | stabilité réseau locale, crash applicatif, fermeture prématurée du worker |
Le cas le plus net est aussi le plus rapide à confirmer. La façade tente de joindre un socket ou un port, mais personne ne répond. Vous voyez alors une erreur 502 nginx côté client, et dans les journaux un refus de connexion ou un socket introuvable.
Vérifiez dans cet ordre :
Sur PHP-FPM, l’erreur classique est un décalage entre le socket déclaré côté Nginx et celui réellement créé par PHP-FPM. Sur Node.js ou Python, c’est souvent un processus tombé, un superviseur mal configuré ou un changement de port après déploiement. Inutile d’ajuster les timeouts si le service n’existe pas au point d’écoute attendu.
Une erreur 502 apparaît aussi quand le service amont n’arrive plus à absorber la charge. Le processus existe, mais il ne traite plus correctement les connexions : workers bloqués, mémoire épuisée, file d’attente pleine, redémarrages en boucle. La façade reçoit alors une réponse incomplète, invalide, ou plus de réponse du tout avant coupure.
Les vérifications utiles sont concrètes :
Si l’origine est la montée en charge, le 502 n’est qu’un symptôme. Il faut ensuite corriger la capacité, la concurrence ou le code. Dans certains cas, optimiser le serveur web sans changer d’hébergement suffit à réduire les pointes qui font tomber l’upstream.
Troisième grande famille, le service fonctionne, mais trop lentement pour la passerelle. La façade ouvre la connexion, attend, puis finit par journaliser un dépassement de délai. C’est un cas fréquent derrière des appels API lents, des requêtes SQL longues, un backend qui fait beaucoup d’I/O ou un réseau interne dégradé.
Il faut alors distinguer deux choses :
Ne commencez pas par augmenter les délais. Mesurez d’abord la durée des requêtes lentes dans les journaux applicatifs et comparez-la au moment exact où la façade produit le 502. Si le chemin entre proxy et upstream passe par un autre hôte, une coupure ou une latence anormale peut aussi être en cause. Dans ce cas, une méthode de diagnostic d’une panne réseau évite de confondre lenteur applicative et incident de transport.
Sur des architectures avec plusieurs intermédiaires, reverse proxy local, load balancer, CDN ou proxy d’entrée, la question n’est pas seulement « quel service en amont a échoué ? », mais aussi « quelle passerelle renvoie le 502 ? ».
Pour le déterminer, suivez cette méthode :
Si seul le CDN journalise l’incident, la passerelle en faute peut être en amont de votre serveur de façade. Si le CDN est sain mais que Nginx logue un timeout vers PHP-FPM ou vers une application sur port TCP, le point de rupture est déjà trouvé. La bonne pratique consiste à corréler les horodatages plutôt qu’à déduire à l’aveugle.
Voici une séquence simple, adaptée à un administrateur avec accès SSH :
Cette méthode couvre l’essentiel des cas sans partir sur des hypothèses trop larges. Un bad gateway n’est pas un mystère abstrait : c’est une conversation ratée entre deux maillons, et le journal du maillon qui se plaint vous dit généralement lequel.
Le 502 a une limite frustrante : il désigne bien une panne de passerelle, mais ne suffit pas à lui seul à prouver la cause racine. Un timeout vu par Nginx peut venir d’un code lent, d’une base en retard, d’un disque saturé, d’un réseau instable ou d’un worker bloqué. Autrement dit, le journal de façade localise très bien le maillon qui ne répond pas correctement, mais il ne remplace pas les journaux et les métriques du service amont. C’est une bonne boussole, pas un diagnostic complet à lui seul.
Le code 502 signifie qu’une passerelle, souvent un reverse proxy ou un load balancer, a reçu une réponse invalide ou aucune réponse valable d’un service en amont. En pratique, le serveur de façade arrive à traiter la requête du client, mais pas à obtenir une réponse correcte du backend auquel il la transmet.
Côté administration, on ne contourne pas durablement une erreur 502 sans identifier le maillon fautif. Il faut lire le journal de la passerelle, repérer l’upstream visé, puis vérifier si le service est arrêté, saturé ou trop lent. Un redémarrage peut rétablir le service, mais sans corriger la cause si elle revient sous charge.
Dans une API, l’erreur 502 signifie qu’une passerelle, un proxy API ou un load balancer n’a pas obtenu de réponse valide du service backend. Le problème n’est pas forcément dans la requête du client : il peut venir d’un microservice indisponible, d’un timeout, d’une saturation ou d’une réponse mal formée en amont.
Repérez la cause réelle d’une erreur 500 en lisant les logs Apache, Nginx, PHP-FPM et système, puis vérifiez…
Tous les comparatifs de stockage cloud se ressemblent : un classement, des prix, des gigaoctets. Le problème est…
Sur site ou cloud : la question se tranche presque toujours avec des arguments de principe, la maîtrise…