Erreur HTTP 502 : Bad Gateway

Quand votre proxy reçoit une réponse invalide du serveur upstream

L'erreur HTTP 502 "Bad Gateway" est un code de statut indiquant qu'un serveur agissant comme passerelle ou proxy a reçu une réponse invalide du serveur upstream vers lequel il transmettait la requête. C'est l'une des erreurs 5xx les plus fréquentes dans les architectures modernes utilisant des reverse proxies, load balancers ou CDN.

Contrairement au 504 (Gateway Timeout) où le serveur upstream ne répond pas du tout, le 502 signifie que le serveur a bien reçu une réponse, mais que cette réponse était invalide ou incompréhensible. Cela peut provenir d'un crash de l'application, d'une réponse HTTP mal formée, ou d'une fermeture de connexion inattendue.

Pour les équipes DevOps et les administrateurs système, comprendre et résoudre rapidement les erreurs 502 est crucial. MoniTao surveille vos endpoints en continu et vous alerte dès qu'une erreur 502 est détectée, permettant une intervention rapide avant que vos utilisateurs ne soient impactés massivement.

Causes courantes de l'erreur 502

L'erreur 502 peut avoir de nombreuses origines, toutes liées à la communication entre le proxy et le serveur backend :

  • Application backend crashĂ©e : l'application PHP, Python, Node.js ou autre a crashĂ© ou a Ă©tĂ© tuĂ©e par le système (OOM killer). Le process manager (PHP-FPM, Gunicorn, PM2) n'a plus de worker disponible pour traiter les requĂŞtes.
  • Timeout PHP-FPM ou Gunicorn : le worker timeout est atteint avant que l'application ne gĂ©nère sa rĂ©ponse. Le process manager tue le worker, fermant brutalement la connexion et gĂ©nĂ©rant un 502 cĂ´tĂ© proxy.
  • Socket backend saturĂ© : les connexions socket vers le backend (TCP ou Unix socket) sont toutes utilisĂ©es ou le listen backlog est dĂ©passĂ©. Les nouvelles connexions sont refusĂ©es.
  • RĂ©ponse HTTP malformĂ©e : l'application backend renvoie une rĂ©ponse qui ne respecte pas le protocole HTTP (headers invalides, contenu corrompu, encodage incorrect). Le proxy ne peut pas interprĂ©ter la rĂ©ponse.

Architectures oĂą survient le 502

Comprendre oĂą se situe le proxy dans votre stack permet de mieux diagnostiquer l'origine du 502 :

  • Nginx → PHP-FPM : configuration classique LEMP. Le 502 survient quand PHP-FPM est arrĂŞtĂ©, surchargĂ©, ou quand le script PHP crash avant de gĂ©nĂ©rer une rĂ©ponse.
  • HAProxy → Backend : en load balancing, le 502 indique qu'aucun backend du pool n'a pu rĂ©pondre correctement. VĂ©rifiez les health checks et l'Ă©tat de chaque backend.
  • Cloudflare → Origin : Cloudflare gĂ©nère un 502 quand votre serveur d'origine renvoie une rĂ©ponse invalide. Le Ray ID dans l'erreur aide au diagnostic.
  • API Gateway → Microservice : dans une architecture microservices, le 502 peut indiquer qu'un service downstream est en erreur. Tracez la requĂŞte pour identifier le service fautif.

Diagnostic de l'erreur 502

Un diagnostic méthodique permet d'identifier rapidement la cause du 502 :

  • VĂ©rifier les processus backend : assurez-vous que PHP-FPM, Gunicorn ou votre serveur applicatif tourne (ps aux, systemctl status). VĂ©rifiez qu'il Ă©coute sur le bon port ou socket.
  • Consulter les logs : examinez les logs du proxy (Nginx error.log) ET de l'application. Les erreurs PHP fatales, les segfaults, les OOM kills y sont consignĂ©s.
  • Tester le backend directement : si possible, accĂ©dez au backend sans passer par le proxy (curl http://127.0.0.1:9000/). Cela isole le problème entre proxy et application.
  • VĂ©rifier les connexions : utilisez netstat ou ss pour voir l'Ă©tat des connexions socket. Un grand nombre de connexions en TIME_WAIT ou CLOSE_WAIT peut indiquer un problème.

Exemple de configuration Nginx pour éviter les 502

Une bonne configuration des timeouts et du nombre de connexions prévient de nombreux 502 :

# /etc/nginx/nginx.conf
upstream php_backend {
    server unix:/var/run/php/php8.2-fpm.sock;
    keepalive 32;  # Pool de connexions persistantes
}

server {
    location ~ \.php$ {
        fastcgi_pass php_backend;
        fastcgi_connect_timeout 60s;
        fastcgi_send_timeout 60s;
        fastcgi_read_timeout 60s;

        # Buffer pour éviter les réponses tronquées
        fastcgi_buffer_size 32k;
        fastcgi_buffers 8 16k;

        # Réessayer sur un autre backend si disponible
        fastcgi_next_upstream error timeout;
        fastcgi_next_upstream_tries 2;
    }
}

Cette configuration établit un pool de connexions keepalive vers PHP-FPM, définit des timeouts adaptés, et configure des buffers suffisants pour éviter les réponses tronquées.

Surveillance des erreurs 502 avec MoniTao

MoniTao offre plusieurs fonctionnalités pour détecter et réagir aux erreurs 502 :

  • DĂ©tection automatique : chaque monitor HTTP capture le code de rĂ©ponse. Un 502 dĂ©clenche immĂ©diatement le processus de vĂ©rification.
  • Double vĂ©rification : pour Ă©viter les faux positifs, MoniTao effectue une seconde vĂ©rification après un dĂ©lai configurable avant d'envoyer l'alerte.
  • Alertes multi-canal : recevez les alertes par email, SMS, Slack, ou webhook selon votre configuration et l'urgence.
  • Historique et tendances : analysez l'historique des erreurs 502 pour identifier des patterns (heure de pointe, après dĂ©ploiement, etc.).

Checklist de résolution rapide

  • VĂ©rifier que le backend tourne : ps aux | grep php-fpm
  • Consulter les logs d'erreur : tail -f /var/log/nginx/error.log
  • VĂ©rifier la mĂ©moire : free -h et dmesg | grep -i oom
  • Tester le socket : curl --unix-socket /var/run/php/php-fpm.sock http://localhost/
  • RedĂ©marrer le backend si nĂ©cessaire : systemctl restart php8.2-fpm
  • Monitorer après correction pour confirmer la rĂ©solution

Questions fréquentes sur l'erreur 502

Quelle différence entre une erreur 502 et une erreur 503 ?

Le 502 Bad Gateway indique une réponse invalide du backend (le backend a répondu mais mal). Le 503 Service Unavailable indique que le service est temporairement indisponible (surcharge, maintenance). Le 502 pointe vers un problème de communication, le 503 vers un problème de capacité.

Pourquoi ai-je des erreurs 502 intermittentes ?

Les 502 intermittents sont souvent liés à la charge : sous forte pression, certaines requêtes dépassent le timeout ou épuisent les workers disponibles. Cela peut aussi indiquer un memory leak dans l'application qui cause des crashes aléatoires.

Mon CDN affiche 502 mais mon site fonctionne en direct, pourquoi ?

Le CDN ne peut pas atteindre votre serveur d'origine correctement. Vérifiez les règles firewall (le CDN utilise des IP spécifiques), les certificats SSL si le CDN se connecte en HTTPS, et les timeouts côté CDN qui peuvent être plus courts.

Comment augmenter le timeout Nginx pour éviter les 502 ?

Augmentez les directives proxy_connect_timeout, proxy_send_timeout et proxy_read_timeout dans votre configuration Nginx. Pour PHP-FPM, utilisez fastcgi_read_timeout. Attention : des timeouts trop longs masquent les problèmes de performance.

L'erreur 502 peut-elle être causée par un problème DNS ?

Pas directement, car le DNS est résolu avant la connexion TCP. Cependant, si votre proxy utilise un nom de domaine pour joindre le backend et que la résolution DNS échoue ou renvoie une mauvaise IP, cela peut causer un 502.

Comment MoniTao m'aide Ă  diagnostiquer les erreurs 502 ?

MoniTao enregistre chaque vérification avec le code de réponse, le temps de réponse et les headers. L'historique permet d'identifier quand les 502 ont commencé, leur fréquence, et s'ils corrèlent avec des événements (déploiement, pic de trafic).

Conclusion

L'erreur HTTP 502 Bad Gateway est un symptôme d'un problème de communication entre votre proxy et votre backend. La résolution passe par un diagnostic méthodique : vérifier que le backend tourne, consulter les logs, tester la connexion directe, et ajuster les timeouts si nécessaire.

Avec MoniTao, vous êtes alerté dès qu'une erreur 502 survient, vous permettant d'intervenir avant que l'impact utilisateur ne devienne critique. Configurez des monitors sur vos endpoints sensibles et utilisez l'historique pour identifier les patterns récurrents.

PrĂŞt Ă  dormir sur vos deux oreilles ?

Commencez gratuitement, sans carte bancaire.