Une erreur 502 Bad Gateway dans Nginx signifie généralement que Nginx n’a pas pu recevoir de réponse valide d’un serveur en amont, tel que PHP-FPM, Node.js ou une autre application backend.
Les causes les plus courantes sont l’arrêt des services applicatifs, des ports ou sockets en amont incorrects, et des processus backend qui plantent ou ferment les connexions de manière inattendue.
Commencez par consulter les journaux d’erreurs de Nginx. Ils révèlent souvent la raison précise de l’échec de la connexion.
Ce guide présente sept étapes pratiques de dépannage pour les serveurs Linux exécutant Nginx.
Quelles sont les causes d’une erreur 502 Bad Gateway dans Nginx ?
Nginx joue souvent le rôle de proxy inverse : il transmet les requêtes aux applications backend et renvoie leurs réponses aux visiteurs.
Si le service en amont ne répond pas correctement, Nginx peut renvoyer le code de statut HTTP 502.
Les causes courantes comprennent :
- Des services backend arrêtés ou ayant planté.
- Des adresses IP, ports ou sockets Unix en amont incorrects.
- Des défaillances de PHP-FPM ou des processus applicatifs.
- Des problèmes de permissions d’accès aux sockets.
- Une mémoire ou un espace disque insuffisant.
- Des connexions en amont non valides ou fermées prématurément.
Les vérifications suivantes supposent que vous disposez d’un accès SSH et des droits nécessaires pour administrer votre serveur Linux.
Si vous ne savez pas comment accéder à un serveur distant, consultez notre guide des commandes SSH pour débutants avant de poursuivre.

1. Consultez les journaux d’erreurs de Nginx
Les journaux d’erreurs de Nginx sont généralement le moyen le plus rapide d’identifier la cause d’une erreur 502.
Connectez-vous à votre serveur via SSH et exécutez :
sudo tail -n 50 /var/log/nginx/error.log
Cette commande affiche les 50 dernières entrées du journal.
Pour suivre les erreurs en temps réel, utilisez :
sudo tail -f /var/log/nginx/error.log
Rechargez la page web concernée et surveillez l’apparition de nouveaux messages.
| Message du journal | Problème probable |
|---|---|
connect() failed (111: Connection refused) | Le backend n’accepte pas les connexions |
No such file or directory | Le socket en amont configuré est introuvable |
Permission denied | Nginx ne peut pas accéder au socket ou à la ressource |
upstream prematurely closed connection | Le backend a fermé la connexion de manière inattendue |
upstream sent invalid header | Le backend a renvoyé des en-têtes de réponse mal formés |
Selon votre configuration d’hébergement, les journaux peuvent se trouver à un autre emplacement.
Ne modifiez pas les paramètres de Nginx avant d’avoir identifié la cause probable.
2. Vérifiez que le service backend fonctionne
Une erreur 502 survient souvent parce que l’application derrière Nginx s’est arrêtée.
Pour un service applicatif géré par systemd, exécutez :
sudo systemctl status myapp
Remplacez myapp par le nom réel de votre service.
Pour les applications PHP utilisant PHP-FPM, le nom du service peut ressembler à ceci :
sudo systemctl status php8.3-fpm
La version de PHP installée et le nom du service peuvent être différents.
Si le service est en échec, examinez ses journaux :
sudo journalctl -u myapp -n 50
Recherchez les plantages, les dépendances manquantes, les erreurs de configuration ou les défaillances liées à la mémoire.
Ne redémarrez le service qu’après avoir identifié et traité le problème sous-jacent.
3. Vérifiez le port ou le socket en amont
Nginx doit transmettre les requêtes à la bonne adresse backend.
Par exemple, une configuration de proxy inverse peut contenir :
location / {
proxy_pass http://127.0.0.1:3000;
}
Cette directive indique à Nginx de transmettre les requêtes à une application HTTP qui écoute sur le port 3000.
Vérifiez qu’un processus écoute sur ce port :
sudo ss -ltnp | grep ':3000'
Vous pouvez également tester directement un backend HTTP :
curl -i http://127.0.0.1:3000/
Si le backend n’est pas disponible, examinez la configuration de son service avant de modifier Nginx.
Vérifiez les sockets PHP-FPM
PHP-FPM utilise couramment des sockets Unix ou des ports TCP.
Une configuration Nginx peut contenir :
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
Vérifiez que le socket configuré existe :
ls -l /run/php/
Le chemin du socket doit correspondre au paramètre listen du pool PHP-FPM, et Nginx doit disposer des permissions nécessaires pour s’y connecter.
Important : proxy_pass s’utilise pour les services HTTP en amont, tandis que fastcgi_pass s’utilise pour les services FastCGI comme PHP-FPM. Ces directives ne sont pas interchangeables.
Si vous configurez Nginx pour la première fois, assurez-vous que proxy_pass pointe vers la bonne adresse backend. Notre tutoriel sur la configuration d’un proxy inverse Nginx sous Ubuntu explique comment configurer la transmission des requêtes, tester la configuration et activer HTTPS.
4. Vérifiez la mémoire et l’espace disque du serveur
Les applications backend peuvent planter ou cesser de répondre lorsque le serveur manque de ressources.
Vérifiez la mémoire :
free -h
Vérifiez l’espace disque :
df -h
Vérifiez les processus en cours d’exécution :
top
Si une application a été arrêtée à cause d’un manque de mémoire, vous pouvez trouver des messages pertinents dans le journal système :
sudo journalctl -k --since "1 hour ago"
Recherchez les événements de manque de mémoire ou les messages indiquant l’arrêt de processus.
Si l’espace disque est épuisé, déterminez ce qui l’occupe avant de supprimer des fichiers.
Pour découvrir d’autres commandes de surveillance, consultez notre guide des commandes Linux essentielles pour l’administration des serveurs.
5. Vérifiez les permissions du socket et les journaux de l’application
Il arrive que le backend fonctionne, mais que Nginx ne puisse pas communiquer avec lui.
Pour les sockets Unix, vérifiez le propriétaire et les permissions :
ls -l /run/php/
Vérifiez également les répertoires menant au socket si les journaux signalent une erreur de permission.
Les permissions appropriées dépendent de l’utilisateur des processus de travail Nginx et de la configuration du service backend.
Évitez d’accorder des permissions trop larges, par exemple avec chmod 777. Modifiez plutôt la configuration du service ou du pool concerné afin que les processus autorisés puissent accéder au socket.
Si les journaux d’erreurs indiquent que le service en amont a fermé sa connexion prématurément, examinez les journaux de l’application backend pour rechercher des plantages, des exceptions ou des requêtes ayant échoué.
6. Testez votre configuration Nginx
Des paramètres de proxy incorrects ou des modifications de configuration peuvent également perturber la communication avec le service en amont.
Avant d’appliquer des modifications, validez la configuration Nginx :
sudo nginx -t
Si le test réussit, rechargez Nginx :
sudo systemctl reload nginx
Le rechargement applique les modifications de configuration valides sans redémarrer inutilement le service.
Si le test échoue, corrigez d’abord l’erreur de configuration signalée.
N’augmentez pas les délais d’expiration du proxy ou les limites des tampons à l’aveugle. Ces ajustements ne résoudront pas le problème si le backend est arrêté, si le socket est incorrect ou si la connexion est refusée.
7. Confirmez que l’erreur 502 est corrigée
Après avoir résolu le problème sous-jacent, testez l’URL concernée :
curl -I https://example.com
Remplacez example.com par votre véritable nom de domaine.
Une requête réussie renvoie généralement un statut HTTP approprié, tel que 200 OK, même si les redirections et d’autres réponses valides peuvent produire des codes différents.
Ouvrez également le site web dans votre navigateur et consultez à nouveau les journaux d’erreurs de Nginx.
Si l’erreur réapparaît en cas de forte charge, surveillez le service backend et l’utilisation des ressources tout en reproduisant le problème.
Comment prévenir les erreurs 502 dans Nginx
Toutes les défaillances du backend ne peuvent pas être évitées, mais une bonne administration du serveur réduit les interruptions de service évitables.
- Surveillez l’état de Nginx et du service backend.
- Consultez les journaux de l’application après les déploiements.
- Configurez des stratégies appropriées de rétablissement des services.
- Surveillez l’utilisation de la mémoire, de l’espace de stockage et des connexions.
- Validez les modifications de configuration avant de les appliquer.
- Testez directement les applications avant d’acheminer le trafic via Nginx.
Si une application a besoin de plus de ressources, mesurez son utilisation réelle avant de décider d’augmenter la capacité du serveur.
Une erreur 502 indique une réponse non valide du serveur en amont, tandis qu’une erreur 504 survient lorsque le serveur en amont met trop de temps à répondre. Si vous rencontrez cette dernière, suivez notre guide pour corriger l’erreur 504 Gateway Timeout et rechercher les causes possibles parmi les applications lentes, les ressources du serveur et les paramètres de délai d’expiration du proxy.
Questions fréquentes
Cela signifie que Nginx, agissant comme passerelle ou proxy, a reçu une réponse non valide d’un serveur en amont. La cause est souvent l’arrêt d’un service backend ou un problème de connexion avec le serveur en amont.
Pas nécessairement. Redémarrer ou recharger Nginx ne résoudra pas le problème si l’application est indisponible, si le port backend est incorrect ou si le socket PHP-FPM est introuvable.
Une erreur 502 indique une réponse non valide du serveur en amont, tandis qu’une erreur 504 signifie que la passerelle n’a pas reçu de réponse du serveur en amont avant l’expiration du délai d’attente.
Oui. Un manque de mémoire peut entraîner le plantage ou l’arrêt des processus backend, empêchant Nginx de communiquer avec eux.
Non. D’autres passerelles, proxys, CDN et répartiteurs de charge peuvent également renvoyer des erreurs HTTP 502.
Conclusion
Pour corriger une erreur 502 Bad Gateway dans Nginx, commencez par déterminer pourquoi l’application en amont ne répond pas correctement.
Consultez d’abord les journaux d’erreurs de Nginx, confirmez que le service backend fonctionne et vérifiez le port ou le socket configuré. Examinez ensuite les limites de ressources, les permissions et les défaillances de l’application.
Dans la plupart des cas, identifier la défaillance précise du service en amont est plus efficace que de redémarrer Nginx à répétition ou de modifier les délais d’expiration.
Comment configurer un proxy inverse Nginx sur Ubuntu
Un proxy inverse Nginx reçoit les requêtes des visiteurs d’un site web et les transmet