502 Bad Gateway

RÉPONSE DIRECTE
502 Bad Gateway signifie qu’un reverse proxy, un load balancer ou un CDN n’a pas pu obtenir une réponse valide du serveur backend. Vérifiez le processus backend, le journal d’erreurs du proxy, l’hôte ou le port upstream, les permissions du socket, les limites de ressources et l’accès du CDN à l’origine. Le problème se situe généralement entre les serveurs plutôt que dans le navigateur.
Points clés
- Un 502 est généré par un intermédiaire lorsque l’application upstream est inaccessible, dépasse le délai d’attente ou renvoie une réponse inexploitable.
- Commencez par le journal d’erreurs du proxy et l’état du processus backend ; ces éléments permettent généralement de distinguer les problèmes de connexion, de délai d’attente, de socket, d’en-têtes et d’application.
- Vérifiez que Nginx, Apache ou le load balancer pointe vers le port réel ou le socket Unix de l’application.
- Si un CDN est impliqué, comparez une requête directe vers l’origine avec la requête publique et vérifiez le pare-feu de l’origine ainsi que ses paramètres TLS.
- Vider le cache du navigateur résout rarement un 502 persistant, car le problème se produit normalement entre les serveurs.
Site Administrator
Ce que signifie cette erreur et comment la reconnaître
- Le navigateur affiche 502 Bad Gateway ou Bad Gateway, parfois avec la marque de Nginx, Apache, Cloudflare ou d’un autre proxy.
- L’erreur touche plusieurs utilisateurs, commence après un déploiement ou une modification de configuration, ou apparaît lors d’une augmentation du trafic.
- Les échecs peuvent être intermittents lorsque les workers backend, la mémoire, le CPU ou les connexions à la base de données sont épuisés.
- Le journal du proxy signale un échec de connexion upstream, un délai d’attente, une ligne d’état illisible, une réponse mal formée, des en-têtes trop volumineux ou une erreur de socket.
- Une requête directe vers l’origine fonctionne alors que la même requête via un CDN renvoie 502, ce qui oriente vers un problème d’accès du CDN à l’origine, de pare-feu, de TLS ou de routage.
Causes principales, classées par probabilité
- Backend arrêté ou instable : PHP-FPM, Node.js, Gunicorn ou un autre processus applicatif est arrêté, redémarre en boucle ou n’a pas démarré après un déploiement.
- Surcharge ou délai d’attente du backend : les workers, la mémoire, le CPU, les connexions à la base de données ou une autre dépendance sont épuisés ; le proxy ne peut donc pas obtenir une réponse à temps.
- Configuration upstream incorrecte : le proxy cible le mauvais hôte, port, adresse de conteneur, socket Unix ou chemin d’application.
- Échec d’accès au socket ou au pare-feu interne : le proxy ne peut pas atteindre le backend en raison de permissions de socket, d’une règle réseau, d’un pare-feu ou d’une modification de security group.
- Réponse backend invalide ou trop volumineuse : l’application envoie une sortie mal formée, une ligne d’état inexploitable ou des en-têtes plus volumineux que ce que le proxy peut accepter.
- Échec de la connexion du CDN à l’origine : un CDN ne peut pas joindre l’origine, est bloqué par le pare-feu de l’origine ou ne peut pas établir la connexion HTTPS attendue par sa configuration d’origine.
Comment corriger le problème
1. Identifier l’intermédiaire qui génère le 502
Vérifiez si la page d’erreur porte la marque de Nginx, Apache, Cloudflare, d’une plateforme d’hébergement ou d’un autre intermédiaire. Déterminez si toutes les routes échouent ou si une seule route applicative est concernée, puis notez l’heure de l’échec et l’URL affectée. Vous pourrez ainsi associer la requête aux bons journaux.
2. Vérifier le processus backend et ses journaux
Avec un accès autorisé au serveur ou au panneau d’hébergement, vérifiez que le processus applicatif est en cours d’exécution et accepte des requêtes. Consultez ses journaux pour rechercher des redémarrages en boucle, des erreurs applicatives fatales, un arrêt pour manque de mémoire, des dépendances manquantes ou des échecs au démarrage.
Par exemple, une vérification de service en lecture seule peut être :
systemctl status php8.2-fpm
systemctl status nginx
pm2 statusUtilisez la version installée de PHP-FPM et le gestionnaire de processus réellement utilisés plutôt que de reprendre ces noms tels quels. Si le backend est arrêté ou redémarre en boucle, corrigez d’abord la cause sous-jacente. Envisagez ensuite seulement de redémarrer le service concerné dans le cadre de votre procédure habituelle de changement ; un redémarrage peut interrompre des requêtes et supprimer des informations utiles sur l’état d’exécution. Vérifiez donc l’autorisation nécessaire et collectez auparavant les journaux pertinents.
3. Lire le journal d’erreurs du proxy
Faites correspondre l’horodatage du journal à une requête en échec. Pour Nginx, consultez le journal d’erreurs configuré, généralement /var/log/nginx/error.log. Pour Apache utilisant mod_proxy ou mod_proxy_fcgi, consultez le journal d’erreurs d’Apache.
Voici quelques distinctions utiles :
connect() failed: le proxy ne peut pas atteindre l’upstream configuré.upstream timed out: le backend ou l’une de ses dépendances est trop lent ou surchargé.upstream sent too big header: les en-têtes de réponse dépassent la taille des buffers du proxy.- Une erreur lors de la lecture de la ligne d’état : le backend a fermé la connexion ou renvoyé une réponse invalide.
L’emplacement exact du journal et le format des messages dépendent du serveur et de la plateforme d’hébergement.
4. Vérifier l’hôte, le port ou le socket upstream
Examinez la configuration du reverse proxy. Dans Nginx, vérifiez le bloc proxy_pass ou upstream. Dans Apache, vérifiez ProxyPass, ProxyPassMatch et les paramètres de connexion à PHP-FPM.
Utilisez une vérification en lecture seule des ports à l’écoute et, lorsque cela est pertinent, une requête locale :
ss -tlnp
curl http://127.0.0.1:PORTRemplacez PORT par le port configuré pour l’application. Si l’application utilise un socket Unix, vérifiez que le chemin existe et que le processus du proxy peut y accéder. Pour PHP-FPM, le paramètre listen du pool doit correspondre à l’adresse ou au socket configuré dans Apache ou Nginx. N’exposez pas publiquement un endpoint de test interne uniquement pour effectuer cette vérification.
5. Examiner la surcharge, les dépendances et les délais d’attente
Si le backend fonctionne mais que les échecs coïncident avec des pics de trafic ou des requêtes lentes, vérifiez le CPU, la mémoire, le nombre de workers, les connexions à la base de données, la profondeur des files d’attente et les limites de ressources du panneau d’hébergement. Un processus peut être actif tout en étant incapable d’accepter du travail supplémentaire.
N’augmentez pas les délais d’attente du proxy ou la taille des buffers sans éléments probants. Si le journal indique des en-têtes trop volumineux, examinez la réponse de l’application et les paramètres Nginx proxy_buffer_size et proxy_buffers concernés. Si une modification de configuration est nécessaire, validez-la et appliquez-la selon la procédure de changement approuvée, plutôt que de recharger un proxy de production sans autorisation.
6. Comparer l’origine et le chemin via le CDN
Lorsque Cloudflare ou un autre CDN est placé devant le site, testez directement l’origine avec l’adresse d’origine et l’en-tête Host appropriés, en disposant de l’autorisation nécessaire. Comparez le résultat avec celui de la requête publique.
- L’origine échoue également : examinez l’application, le proxy, le socket, le port, le pare-feu et les ressources disponibles sur l’origine.
- L’origine fonctionne mais le CDN échoue : vérifiez les règles de pare-feu entre le CDN et l’origine, l’accessibilité de l’origine, le routage et le mode SSL/TLS d’origine du CDN. Confirmez que l’origine présente le protocole et la configuration de certificat attendus par le CDN.
7. Tester à nouveau après correction de la cause
Commencez par confirmer que l’origine renvoie la réponse attendue. Testez ensuite la requête via le reverse proxy ou le CDN. Si seules certaines URL échouent, comparez leurs routes applicatives, la taille des réponses, les exigences d’authentification et les dépendances backend au lieu de considérer le problème comme une panne générale.
8. Vérifier les limites du panneau d’hébergement
Sur cPanel, Plesk ou un hébergement mutualisé similaire, consultez les journaux de PHP-FPM et d’utilisation des ressources. Le compte peut atteindre une limite de processus, de mémoire ou de concurrence imposée par le fournisseur. Si cette limite ne peut pas être modifiée, transmettez à l’hébergeur les heures des échecs, la route concernée et le message de journal pertinent afin qu’il puisse examiner les journaux de l’infrastructure.
Prévention et vérification du correctif
- Exécutez l’application sous la supervision d’un gestionnaire de processus et surveillez les plantages répétés au lieu de compter uniquement sur les redémarrages automatiques.
- Surveillez la mémoire, le CPU, l’utilisation des workers, les connexions à la base de données, la profondeur des files d’attente et les limites du panneau d’hébergement avant qu’ils n’affectent les requêtes.
- Définissez des délais d’attente cohérents et compatibles entre l’application, le proxy, le load balancer et le CDN ; n’utilisez pas des délais plus longs pour dissimuler un backend défaillant.
- Vérifiez le port ou le socket attendu de l’application après les déploiements et les modifications de configuration.
- Testez des routes représentatives directement sur l’origine et via le CDN après toute modification du TLS de l’origine, des règles de pare-feu ou de la configuration du proxy.
- Conservez les journaux du proxy et de l’application avec des horodatages synchronisés afin de pouvoir associer les réponses 502 intermittentes aux événements du backend.
- Documentez le service responsable, l’adresse upstream, les permissions du socket et la procédure de récupération approuvée pour l’environnement.
Quand demander une aide externe
Contactez le fournisseur d’hébergement, le fournisseur de CDN ou le support de la plateforme lorsque le backend continue de planter, que le compte atteint une limite fixe de ressources ou que vous n’avez pas accès aux journaux du proxy, du conteneur, du load balancer ou de l’origine. Indiquez les heures exactes des échecs, l’URL ou la route concernée, précisez si l’origine a été testée directement, mentionnez l’intermédiaire qui a affiché l’erreur et joignez le message pertinent du journal du proxy. Faites remonter un problème spécifique au CDN lorsque les requêtes directes vers l’origine réussissent mais que les requêtes via le CDN continuent d’échouer après vérification du TLS de l’origine, de l’accès du pare-feu et de l’accessibilité réseau.
Questions fréquentes
Vider le cache du navigateur corrige-t-il une erreur 502 Bad Gateway ?
Rarement. Un 502 est normalement produit par un proxy ou un CDN après un échec de communication entre serveurs. Vider le cache peut supprimer une page d’erreur mise en cache, mais ne répare pas un backend arrêté, surchargé, inaccessible ou mal configuré.
Un 502 est-il identique à une erreur 500 ?
Non. Une erreur 500 signifie que le serveur applicatif a rencontré une erreur interne en traitant une requête. Un 502 signifie qu’un intermédiaire a reçu du backend une réponse invalide ou inexploitable, ou qu’il n’a pas réussi à communiquer avec lui.
Un 502 Bad Gateway peut-il se résoudre tout seul ?
Parfois. Un pic temporaire de trafic peut se résorber, ou un processus backend supervisé peut récupérer. Si l’erreur persiste ou revient régulièrement, examinez les journaux du backend et du proxy au lieu de compter sur des rechargements répétés de la page.
Pourquoi Cloudflare affiche-t-il un 502 alors que l’origine fonctionne directement ?
Le CDN peut être incapable d’atteindre l’origine depuis son réseau edge, être bloqué par le pare-feu de l’origine ou ne pas pouvoir établir la connexion TLS attendue. Comparez les requêtes directes et celles via le CDN, puis vérifiez les règles d’accès à l’origine et la configuration SSL/TLS d’origine du CDN.
Que dois-je vérifier en premier dans Nginx pour un 502 ?
Vérifiez le journal d’erreurs de Nginx, confirmez que l’application écoute à l’adresse configurée dans proxy_pass et testez cette adresse localement. Les échecs de connexion, les délais d’attente et les messages concernant des en-têtes trop volumineux nécessitent des vérifications différentes.
Que signifie un 502 sur un hébergement mutualisé ?
Cela signifie souvent que le pool PHP-FPM du compte a planté ou atteint une limite de processus ou de ressources imposée par le fournisseur. Consultez les journaux de PHP-FPM et d’utilisation des ressources dans le panneau d’hébergement, puis contactez l’hébergeur si la limite ne peut pas être ajustée.
Documentation complémentaire
Pour les détails d’implémentation faisant autorité, consultez la documentation de l’intermédiaire et du backend utilisés dans l’environnement concerné : documentation de Nginx ou Apache sur les reverse proxies et les journaux d’erreurs, référence de configuration des pools PHP-FPM lorsque PHP est utilisé, documentation du gestionnaire de processus applicatifs et recommandations du fournisseur de CDN concernant la connectivité à l’origine, le pare-feu et le SSL/TLS. Utilisez la version de la documentation correspondant aux logiciels installés et à la plateforme d’hébergement.