Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code : Skills Commencer
Sections
Administration Linux Windows

502 Bad Gateway Expliqué : Ce que cela signifie, pourquoi cela se produit et comment le dépanner

Mots-clés

Ce glossaire rapide couvre les mots d’infrastructure les plus susceptibles de créer de la confusion lors de la phase d’explication plus approfondie.

Mot-cléExplication brève
🌐 502 Bad GatewayUne erreur HTTP montrant qu’un serveur n’a pas pu utiliser la réponse qu’il a reçue du serveur suivant derrière lui.
🚪 GatewayUn serveur qui se situe entre le visiteur et un autre service, transmettant les demandes plus loin.
🔁 Proxy / Reverse ProxyUn serveur en première ligne qui accepte d’abord une demande, puis la transmet à un service interne.
⬆️ UpstreamLe serveur ou service suivant derrière le proxy — celui censé répondre à la demande.
⚙️ BackendLe côté application qui fait le vrai travail, comme un processus d’application, un service ou un runtime.
🏠 OriginLe serveur qu’un CDN ou service edge essaie d’atteindre au nom du visiteur.
⚖️ Load BalancerUne couche frontale qui distribue les demandes sur une ou plusieurs cibles backend.
☁️ CDN / EdgeUne couche réseau plus proche des visiteurs qui peut mettre en cache, filtrer ou transmettre le trafic avant qu’il n’atteigne l’origin.
🧭 DNSLe système de nommage qui aide un nom d’hôte à se résoudre en adresse serveur qu’un service doit utiliser.
🔐 TLSLa couche de chiffrement et d’identité derrière HTTPS ; une incompatibilité ici peut casser les transferts serveur-à-serveur.
🔌 Port / SocketLe point de terminaison réseau ou le chemin de socket local où le backend est censé écouter les connexions.

Pourquoi une erreur 502 semble si perturbatrice

disruptive

Vous poussez un déploiement, rechargez le site, et le domaine répond instantanément — sauf que pas avec votre application. Ou un client clique sur Checkout, la page se charge, et la transaction échoue derrière un message stark 502 Bad Gateway. C’est ce qui rend cette erreur si stressante : le site est accessible, mais pas assez sain pour compléter le transfert.

Un 502 se situe dans un état intermédiaire maladroit. Ce n’est pas une disparition totale, mais ce n’est pas non plus un service qui fonctionne. Pour les développeurs, cela peut signifier un déploiement cassé ou une chaîne API défaillante. Pour les propriétaires d’entreprise, une perte de confiance ou des revenus interrompus. Pour les équipes, le pire est souvent la responsabilité : quel niveau possède réellement le problème ?

La façon utile de l’aborder est de ne pas deviner. D’abord, définissez ce que l’erreur signifie. Ensuite, cartographiez où elle se situe dans la chaîne de requêtes. Ensuite, dépannez l’échec logiquement, un transfert à la fois. Une fois que vous pouvez voir la chaîne, l’erreur cesse de sembler aléatoire.

Ce que signifie réellement une erreur 502 Bad Gateway

error

Une erreur 502 Bad Gateway signifie généralement qu’un serveur agissant comme passerelle ou proxy n’a pas pu utiliser la réponse qu’il a reçue de la couche suivante. En langage simple : un serveur a essayé de transmettre votre demande à un autre serveur, et ce transfert a échoué suffisamment gravement pour que le serveur frontal ne puisse pas retourner un résultat normal.

📝 Remarque : Si le serveur amont retourne une erreur HTTP valide de son côté, le proxy transmettra généralement cette erreur. Si l’application retourne un vrai 503 Service Unavailable, la couche frontale devrait normalement relayer ce 503, et non inventer un 502. Un 502 signifie que la réponse elle-même était inutilisable. Si aucune réponse utilisable n’arrive à temps, c’est souvent un 504 à la place.

Le moyen le plus rapide d’arrêter de mal interpréter les erreurs 5xx est de les séparer selon le lieu de la défaillance et la question qu’elles posent en premier :

StatutCe qui a échouéOù se situe la défaillanceMeilleure première question
500L’application ou l’origine a rencontré une erreur interne lors du traitement de la demandeÀ l’intérieur de l’application ou du service d’origine lui-mêmeQu’est-ce qui s’est cassé à l’intérieur de l’application ?
502Une passerelle ou un proxy a reçu une réponse invalide ou inutilisable du prochain sautAu point de transfert entre les couchesQuel serveur a transféré la demande, et qu’est-ce qui est revenu ?
503Le service est temporairement indisponible ou refuse le travailAu niveau du service qui devrait traiter la demandeLe service est-il surchargé, en maintenance ou intentionnellement indisponible ?
504Une passerelle ou un proxy n’a pas reçu de réponse opportune du prochain sautÀ la même zone de transfert que 502, mais avec une sémantique de délai d’expirationLe serveur amont a-t-il échoué à répondre avant la fermeture de la fenêtre de délai d’expiration ?

⚠️ Avertissement : Ne regroupez pas 500, 502, 503 et 504 dans un seul panier générique « serveur arrêté ». Elles pointent vers différentes formes de défaillance, et cela change ce que vous devriez vérifier en premier.

Une fois que cette définition est claire, la question suivante devient beaucoup plus utile : où dans une pile réelle ce transfert échoué se produit-il réellement ?

Où l’erreur se produit dans une chaîne de requête réelle

chain

La plupart des requêtes modernes ne voyagent pas directement du navigateur à l’application. Elles traversent des couches : navigateur vers CDN ou edge, edge vers reverse proxy ou load balancer, proxy vers le processus d’application. Un 502 devient visible à l’un de ces points de transfert.

Chaîne de requête simplifiée : Navigateur → CDN/Edge → Reverse Proxy / Load Balancer → App / Process

Un reverse proxy accepte la requête publique et la transfère en interne. Un load balancer fait quelque chose de similaire, mais peut choisir entre plusieurs cibles saines. Dans les deux cas, la couche avant effectue le routage de la requête, pas la logique métier elle-même.

L’analogie de la réception fonctionne bien ici. Pensez au proxy comme à la réception d’un immeuble de bureaux. Il enregistre le visiteur, cherche le bon bureau et essaie de le transférer. Si le bureau ne répond pas, répond sur la mauvaise ligne ou donne une réponse que la réception ne peut pas utiliser, la réception retourne l’échec. C’est pourquoi l’erreur visible apparaît souvent à la couche proxy même quand la cause profonde se situe ailleurs.

📝 Note : Le proxy est souvent le messager de l’échec, pas la cause originelle.

Le « serveur suivant » derrière cette réception peut être un service HTTP normal sur un port, un écouteur d’application tel que 127.0.0.1:3000, ou un processus soutenu par un socket local tel que PHP-FPM. Le problème racine n’a pas besoin de vivre dans le proxy. Un mauvais déploiement, un worker d’application écrasé ou même une défaillance de base de données peuvent casser le backend suffisamment pour que le proxy soit simplement l’endroit où le 502 apparaît.

Les services edge ajoutent une autre complication. Un CDN tel que Cloudflare peut transférer un 502 côté origine de plus profond dans votre pile, ou il peut générer un 502 lui-même quand le transfert edge-to-origin échoue. C’est pourquoi « qui a retourné cette erreur ? » est la première question pratique, pas une réflexion après coup.

Pourquoi les erreurs 502 se produisent : les principales catégories de défaillance

why-fail

Une fois que vous cessez de traiter un 502 comme un événement mystérieux, le paysage des causes devient beaucoup plus facile à gérer. La plupart des incidents entrent dans trois catégories réutilisables : l’upstream est indisponible, le transfert lui-même est mal configuré, ou la réponse revient sous une forme que la passerelle ne peut pas utiliser.

CatégorieExemple de défaillanceCe que vous testez généralement ensuite
Upstream indisponibleProcessus d’application arrêté, service arrêté, cible défaillante après déploiementLe service est-il en cours d’exécution et quelque chose écoute-t-il où le proxy s’y attend ?
Décalage de transfertMauvais port, mauvais chemin de socket, mauvais protocole, défaillance DNS, blocage du pare-feu, décalage TLSLe proxy pointe-t-il au bon endroit avec le bon protocole et la bonne route ?
Réponse inutilisableEn-têtes malformés, en-têtes surdimensionnés, fermeture prématurée, réinitialisation de connexion, effets secondaires de surchargeQue montrent les journaux, les tests directs et les paramètres de délai d’expiration ou d’en-têtes ?

Le premier bucket est le plus évident : l’upstream n’est pas disponible dans un état utilisable. Peut-être que l’application s’est arrêtée après le déploiement. Peut-être que le service n’a jamais redémarré. Peut-être qu’un pool PHP-FPM est mort, ou qu’une cible a été marquée comme défaillante et supprimée de la rotation. C’est le scénario classique « service arrêté », mais ce n’est qu’une partie du paysage des 502.

Le deuxième bucket est le décalage de transfert. Ici, les deux couches peuvent être en cours d’exécution, mais elles ne sont pas d’accord sur la façon de se joindre. Le proxy peut pointer vers le mauvais port. Un nom d’hôte peut se résoudre incorrectement. Un pare-feu peut bloquer le chemin. Une couche peut s’attendre à HTTPS tandis que la suivante ne parle que HTTP simple. Un chemin de socket peut avoir changé. Dans ces cas, l’application peut être saine et la connexion entre les couches est toujours cassée.

Le troisième bucket est plus délicat : l’upstream répond, mais pas d’une manière que la passerelle peut utiliser. Une cible peut réinitialiser la connexion TCP, la fermer trop tôt, envoyer des en-têtes malformés ou surdimensionnés, ou retourner une sortie partielle sous charge. L’application n’est pas simplement « arrêtée » ; elle répond assez mal pour que la passerelle rejette ce qu’elle a reçu.

C’est aussi pourquoi 502 n’est pas juste une histoire de délai d’expiration. Certains cas de délai d’expiration deviennent 504 Gateway Timeout, pas 502. Cloudflare peut afficher les 502 générés par les bords lorsque la connectivité d’origine ou la compression se casse. Les équilibreurs de charge peuvent émettre des 502 lors de problèmes de synchronisation de désenregistrement ou d’échecs de poignée de main TLS. « Service arrêté » est une catégorie de cause, pas la définition de l’erreur.

Ce modèle mental vous donne une véritable liste de contrôle avant même de toucher à un fichier de configuration. Demandez-vous dans quel bucket vous êtes probablement, puis testez pour trouver des preuves. C’est ce qui rend la séquence de dépannage logique au lieu de rituelle.

Une séquence de dépannage intelligente pour les erreurs 502

troubleshoot

Le moyen le plus rapide de dépanner une erreur 502 est d’identifier quelle couche l’a renvoyée, puis de tester le prochain saut derrière cette couche avant de modifier quoi que ce soit. L’objectif est de prouver où se trouve l’échec du transfert.

💡 Conseil : Avant de redémarrer ou de modifier quoi que ce soit, identifiez qui a renvoyé l’erreur 502. Une étape d’attribution claire économise souvent plus de temps que les cinq premiers « correctifs » que les gens essaient sous pression.

Phase 1 : Identifier la couche

Commencez par le côté public et demandez-vous ce que la couche exposée à Internet retourne réellement :

curl -I https://example.com

Cela affiche le statut HTTP et les en-têtes de l’URL publique. Si les en-têtes appartiennent clairement à un CDN, un équilibreur de charge ou un proxy inverse, vous avez votre premier indice. Si la page d’erreur porte la marque de Cloudflare, Cloudflare a peut-être généré l’erreur 502 elle-même ; si elle n’est pas marquée, l’edge peut simplement transmettre un échec côté origine. Des en-têtes tels que cf-error-type ou cf-error-origin peuvent apparaître sur les pages d’erreur générées par Cloudflare, ce qui est utile précisément parce qu’ils n’apparaissent pas sur chaque 502.

📝 Remarque : Si un seul visiteur voit l’erreur tandis que d’autres peuvent accéder au site, les paramètres VPN locaux, proxy, pare-feu ou DNS peuvent toujours faire partie du problème. Une erreur 502 est généralement côté serveur, mais un chemin client isolé peut obscurcir ce que vous observez.

Phase 2 : Vérifier le chemin en amont

Une fois que vous savez quelle couche a renvoyé l’erreur 502, testez le prochain saut derrière elle. Si un proxy inverse est impliqué, confirmez que le proxy et le service backend s’exécutent tous les deux, et confirmez que l’écouteur attendu existe :

systemctl status nginx
systemctl status <app-service>
ss -tlnp

Remplacez <app-service> par le nom de votre service backend. systemctl status vous indique si le processus proxy ou application est actif, défaillant ou en redémarrage. ss -tlnp montre si quelque chose écoute réellement sur le port que vous attendez.

Testez ensuite si le backend répond directement sans le proxy au milieu :

curl -i http://127.0.0.1:3000

Si la demande directe fonctionne mais l’URL publique retourne toujours 502, le backend peut être sain et le transfert peut être le vrai problème. Cela vous oriente vers les paramètres de cible proxy, les incompatibilités de protocole, les noms d’hôte en amont, les attentes TLS ou les règles de pare-feu plutôt que vers le code d’application seul.

Phase 3 : Utiliser les commandes comme preuve, pas comme cérémonie

Après les vérifications directes, passez aux preuves qui expliquent pourquoi le transfert échoue :

journalctl -u nginx -u <app-service> --since "15 min ago"
dig +short example.com
nginx -t

Ces trois vérifications répondent à des questions différentes. journalctl met en évidence les plantages récents, les réinitialisations, les indices de délai d’attente et les défaillances liées au déploiement. dig +short vous indique si le nom d’hôte dont vous dépendez se résout de la manière que le serveur attend. nginx -t valide la syntaxe du proxy inverse avant de recharger quoi que ce soit, ce qui importe car une mauvaise définition en amont peut générer une erreur 502 même quand le backend va bien.

Les signaux pratiques ressemblent généralement à ceci :

SignalCe qu’il suggèreVérification suivante
Le curl -I public retourne 502 d’un CDN ou d’une edgeL’edge peut générer l’erreur ou la transmettre depuis l’origineDéterminez si la page edge est marquée et comparez avec la disponibilité côté origine
Le curl direct vers 127.0.0.1:3000 fonctionne, mais l’URL publique échoueLe backend répond, mais le transfert du proxy ou de l’équilibreur de charge est incorrectInspectez la cible en amont, le protocole, TLS et la config du proxy
systemctl status <app-service> affiche failed ou inactiveL’amont n’est pas disponibleExaminez les logs récents et le dernier événement de déploiement ou redémarrage
ss -tlnp ne montre rien sur le port attenduLe service n’écoute pas où le proxy l’attendConfirmez l’adresse de liaison, le port, le chemin socket et la config de démarrage
journalctl affiche des réinitialisations, des problèmes d’en-têtes ou des fermetures prématuréesLa réponse atteint la passerelle sous une forme casséeMettez en corrélation les logs du proxy avec les logs de l’app et inspectez le comportement de réponse ou d’en-têtes
dig +short retourne le mauvais hôte ou pas de réponseLa résolution de noms fait partie de l’échec du transfertCorrigez le nom d’hôte en amont, les enregistrements DNS ou le chemin du résolveur

C’est le motif principal à retenir : identifiez la couche, vérifiez le prochain saut, puis utilisez les logs et les tests directs pour expliquer l’inadéquation. Les preuves d’abord. Les paramètres ensuite.

Comment le chemin de dépannage change selon le modèle d’hébergement

path

Le prochain pas après un 502 dépend de la quantité de pile que vous contrôlez. La logique de dépannage reste la même, mais la quantité que vous pouvez inspecter vous-même change beaucoup entre l’hébergement mutualisé, les VPS, les serveurs dédiés et les configurations avec proxy en périphérie.

EnvironnementCe que vous pouvez généralement inspecterQuand escalader
Hébergement mutualiséJournaux limités, statut du panneau de contrôle, URL reproductible ou motif temporelTôt — surtout si vous ne pouvez pas inspecter directement les journaux du proxy ou du service
VPSServices, ports, journaux, configuration du reverse-proxy, pare-feu, DNS localAprès avoir confirmé que le problème se situe en dehors de votre propre service ou chemin de configuration
Serveur dédiéPile complète plus responsabilité réseau et système plus profondeQuand le problème pointe vers le réseau du fournisseur, le matériel ou les dépendances en amont en dehors de votre contrôle
Configuration CDN / edge-proxiedComportement en périphérie, en-têtes, indices de marque, accessibilité de l’origineUne fois que vous savez si la périphérie a généré l’erreur ou l’a transmise

📝 Remarque : Sur l’hébergement mutualisé, l’escalade n’est pas une échappatoire. C’est souvent le bon geste technique car les couches les plus importantes pour un 502 peuvent être en dehors de votre visibilité.

Sur l’hébergement mutualisé, la chose la plus utile que vous puissiez faire est de collecter des preuves : l’heure, l’URL affectée, si l’erreur est constante ou intermittente, et si elle a commencé après un déploiement ou un changement de configuration. Cela donne au support quelque chose d’exploitable. Si vous ne contrôlez pas le reverse proxy, le service d’application ou les journaux du serveur, le diagnostic significatif couche par couche s’arrête rapidement.

Sur un VPS, le flux de travail complet devient réaliste car vous pouvez inspecter les services, les écouteurs, les journaux et la configuration du proxy directement. C’est là que le dépannage du reverse-proxy a sa place. Sur l’infrastructure VPS d’AlexHost, vérifier systemctl, journalctl, ss, les cibles en amont et la configuration Nginx fait partie de la propriété normale, pas quelque chose toujours caché derrière le support.

Un serveur dédié vous donne la même visibilité, mais avec plus de responsabilité. Vous possédez plus de la pile complète, et possiblement plus des hypothèses réseau environnantes aussi. Si vous ajoutez un CDN ou un autre service en périphérie, la première question de propriété reste la même : la périphérie a-t-elle généré le 502, ou a-t-elle transmis une défaillance côté origine ? Plus de contrôle ne rend pas le dépannage plus simple par défaut. Cela vous donne plus d’endroits à inspecter.

Pensez par couches, pas en panique

think

Une erreur 502 Bad Gateway cesse de sembler mystérieuse une fois que vous la traitez pour ce qu’elle est généralement : un transfert échoué entre serveurs, pas un événement aléatoire du navigateur. Le navigateur est seulement l’endroit où vous le remarquez. L’histoire réelle se trouve dans la couche qui transmet la demande à la suivante et qui échoue à obtenir quelque chose d’utilisable.

Gardez donc la séquence simple : identifiez la couche, vérifiez le prochain saut, validez avec des tests directs et des journaux, et modifiez les paramètres uniquement lorsque les preuves pointent vers un endroit spécifique. Si les incidents récurrents vous poussent continuellement vers une meilleure visibilité des journaux, des proxies et des services, c’est le moment où les environnements à contrôle plus élevé — y compris les VPS AlexHost ou les serveurs dédiés — deviennent utiles pour des raisons opérationnelles, pas marketing. La méthode prime sur la mémorisation ici.