Erreur 502 Bad Gateway : Diagnostic Complet

Comprendre et résoudre l'erreur "Mauvaise passerelle" entre proxy et backend.

L'erreur 502 Bad Gateway est l'une des plus frustrantes à diagnostiquer. Elle indique que le serveur proxy (Nginx, Apache, ou un load balancer) n'a pas pu obtenir une réponse valide du serveur backend. Le problème n'est pas sur le proxy lui-même, mais quelque part en amont.

Cette erreur peut avoir des dizaines de causes différentes : crash du service PHP-FPM, surcharge de la base de données, timeout de l'application, ou simple mauvaise configuration. La clé du diagnostic est de savoir exactement où chercher.

Ce guide vous accompagne étape par étape dans le diagnostic d'une erreur 502. Des vérifications basiques aux commandes avancées, vous aurez toutes les clés pour identifier et résoudre le problème rapidement.

Comprendre l'Erreur 502 Bad Gateway

L'erreur 502 se produit dans une architecture avec un proxy inverse :

Causes Principales de l'Erreur 502

Voici les causes les plus fréquentes d'une erreur 502 Bad Gateway :

Étapes de Diagnostic

Suivez ces étapes pour identifier la cause de l'erreur 502 :

  1. Vérifier l'état du backend : Commencez par vérifier si PHP-FPM, Node, ou votre service backend est en cours d'exécution. C'est la cause numéro 1.
  2. Consulter les logs du proxy : Les logs Nginx/Apache contiennent le message d'erreur exact : "upstream timed out", "connection refused", etc.
  3. Vérifier les logs backend : PHP-FPM, Node.js, ou votre framework logguent généralement la raison du crash ou de l'échec.
  4. Contrôler les ressources : Vérifiez CPU, RAM, et disque. Un système saturé peut provoquer des comportements erratiques.
  5. Tester la connexion directe : Essayez de contacter le backend directement (curl vers le port/socket) pour isoler le problème.

Commandes de Diagnostic

Voici les commandes essentielles pour diagnostiquer une erreur 502 :

# Vérifier l'état de PHP-FPM
systemctl status php-fpm
journalctl -u php-fpm -n 50

# Vérifier l'état de Nginx
systemctl status nginx
tail -100 /var/log/nginx/error.log

# Rechercher les erreurs 502 récentes
grep "502" /var/log/nginx/access.log | tail -20

# Vérifier les ressources système
free -h
df -h
top -bn1 | head -20

# Tester la connexion au socket PHP-FPM
curl --unix-socket /var/run/php/php-fpm.sock http://localhost/status

# Vérifier les connexions réseau
ss -tlnp | grep -E "php|nginx"

Ces commandes vous donnent une vue complète : état des services, logs d'erreur, ressources système, et connectivité. Commencez par systemctl status pour une première évaluation rapide.

Solutions Selon la Cause

Une fois la cause identifiée, appliquez la solution appropriée :

Prévention des Erreurs 502

Mieux vaut prévenir que guérir. Voici comment éviter les futures erreurs 502 :

Checklist Diagnostic 502

  • Vérifier que le service backend (PHP-FPM/Node) est démarré
  • Consulter les logs d'erreur Nginx/Apache
  • Vérifier les logs du backend pour les crashes
  • Contrôler les ressources système (RAM, CPU, disque)
  • Tester la connexion directe au socket/port backend
  • Vérifier les timeouts de configuration proxy

Questions Fréquentes

Quelle est la différence entre 502 et 504 ?

Une 502 (Bad Gateway) signifie que le proxy a reçu une réponse invalide du backend. Une 504 (Gateway Timeout) signifie que le proxy n'a reçu aucune réponse dans le délai imparti. La 502 indique souvent un crash, la 504 une lenteur.

L'erreur 502 est-elle côté client ou serveur ?

C'est une erreur côté serveur (5xx). Le client n'y peut rien. Cependant, l'utilisateur peut réessayer plus tard car l'erreur est souvent temporaire.

Comment éviter les 502 pendant les déploiements ?

Utilisez un déploiement sans interruption (zero-downtime) : nouvelles instances démarrées avant d'arrêter les anciennes, ou reload graceful de PHP-FPM qui termine les requêtes en cours.

Cloudflare affiche une 502 mais mon serveur fonctionne ?

Cloudflare est un proxy. S'il affiche 502, c'est qu'il n'arrive pas à contacter votre serveur. Vérifiez le firewall, les timeouts Cloudflare, et que votre serveur accepte les connexions de Cloudflare.

Une 502 peut-elle venir d'une API externe ?

Oui, si votre application appelle une API externe et que celle-ci retourne une erreur, votre backend peut échouer et provoquer une 502. Vérifiez les appels API dans vos logs applicatifs.

Comment configurer un message d'erreur 502 personnalisé ?

Dans Nginx, utilisez la directive error_page 502 /custom-502.html; et créez une page HTML statique. Évitez que cette page nécessite PHP car le backend est justement le problème.

Conclusion

L'erreur 502 Bad Gateway est un symptôme qui pointe vers un problème de communication entre votre proxy et votre backend. La cause racine peut être un crash, un timeout, ou un épuisement de ressources.

Avec MoniTao, vous détectez ces problèmes avant qu'ils n'impactent vos utilisateurs. Les alertes de timeout et de temps de réponse vous préviennent des dégradations qui précèdent souvent une 502 complète.

Prêt à dormir sur vos deux oreilles ?

Commencez gratuitement, sans carte bancaire.