Déploiement
Déploiement • Chapitre 13 : Maintenance et dépannage en production

Analyse des erreurs HTTP 400, 403, 404, 500 et 502

Les codes HTTP sont le langage universel de diagnostic du web. Apprenez à distinguer instantanément si un problème provient de la requête du visiteur (4xx), du code applicatif (500) ou de la passerelle Nginx vers le processus Node (502/504).

✋
Erreurs 4xx (Client)

Le client a envoyé une requête invalide, non autorisée ou demandant une URL inexistante.

💥
Erreur 500 (Applicatif)

Une exception non gérée s'est produite dans le code TypeScript/JavaScript du backend.

🔌
Erreur 502 (Bad Gateway)

Nginx est opérationnel mais ne parvient pas à joindre le processus Node sur le port 3000.

⏱️
Erreur 504 (Gateway Timeout)

Node ou la base de données a mis plus de 60 secondes à répondre à la requête.

http-error-troubleshooting.sh
# 1. Reproduire l'erreur avec curl en affichant le statut HTTP exact
$ curl -s -o /dev/null -w "Statut HTTP: %{http_code}
" https://api.learnweb.com/api/v1/orders
Statut HTTP: 502

# 2. Diagnostiquer l'erreur 502 dans le journal Nginx
$ sudo tail -n 5 /var/log/nginx/error.log
2026/10/11 15:40:12 [error] 1024#1024: *120 connect() failed (111: Connection refused)
while connecting to upstream, client: 198.51.100.42, server: api.learnweb.com,
request: "GET /api/v1/orders HTTP/1.1", upstream: "http://127.0.0.1:3000/api/v1/orders"
# 🚨 Cause immédiate : le processus Node.js sur le port 3000 est ÉTEINT ou a crashé !

# 3. Vérifier l'état du processus avec PM2
$ pm2 status
# Si l'API est en statut "errored" ou "stopped" :
$ pm2 logs learnweb-api --err --lines 20
$ pm2 restart learnweb-api

Guide Approfondi & Architecture Système

1. La Règle Mnémonique des Centaines HTTP

Pour savoir immédiatement qui accuser en réunion d'incident :
  • 4xx (400, 401, 403, 404) : « C'est la faute du client » (ou du code frontend qui a envoyé un mauvais JSON ou oublié le token d'authentification).
  • 500 : « C'est la faute du développeur backend » (une variable est undefined, un try/catch manque).
  • 502 : « C'est la faute du serveur / DevOps » (le programme est éteint, PM2 a planté, le port 3000 n'écoute pas).
  • 504 : « C'est la faute de la base de données ou du réseau » (une requête SQL trop lourde sans index gèle le serveur pendant plus de 60 secondes).

2. Le Cas Particulier du 404 sur les Routes Frontend SPA

Si votre page d'accueil marche mais que learnweb.com/dashboard renvoie une 404 Nginx brute :

Ce n'est pas un bug de votre code JavaScript : c'est simplement l'oubli de la directive try_files $uri $uri/ /index.html; dans votre configuration Nginx. Nginx cherchait un vrai dossier sur le disque au lieu de déléguer au routeur client !

Tableau de Synthèse des Pannes HTTP et Actions Correctives

Code HTTPNom OfficielCause Réelle en ProductionAction Immédiate de Dépannage
400Bad RequestSchéma de données non conforme (ex: validation Zod échouée)Inspecter le payload JSON envoyé dans l'onglet Réseau (F12)
401UnauthorizedToken JWT absent, malformé ou expiréRediriger l'utilisateur vers la page de reconnexion /login
403ForbiddenToken valide mais rôle insuffisant ou IP bloquée par WAFVérifier les droits de l'utilisateur ou la règle de sécurité
500Internal Server ErrorException JavaScript non capturée dans le code de l'APIConsulter pm2 logs pour voir la trace d'erreur (Stack Trace)
502Bad GatewayProcessus Node.js non démarré sur le port interne 3000Démarrer ou redémarrer le service avec pm2 restart learnweb-api
504Gateway TimeoutRequête de BDD trop longue ou API externe bloquéeOptimiser les index MySQL ou augmenter proxy_read_timeout