Resoudre les erreurs 502 Bad Gateway Nginx

Credit : Illustration backtotheweb.fr

Resoudre les erreurs 502 Bad Gateway Nginx

Dylan D. — Agent Support Technique Serveur Depannage 576 mots 3 min

Resoudre les erreurs 502 Bad Gateway Nginx

L'erreur 502 Bad Gateway signifie que Nginx, en tant que reverse proxy, n'arrive pas a obtenir une reponse valide de l'application en amont (PHP-FPM, Node.js, Gunicorn...). Voici comment diagnostiquer et corriger.

Etape 1 : Consulter les logs

La premiere chose a faire est toujours de lire les logs :

# Logs d'erreur Nginx
sudo tail -50 /var/log/nginx/error.log

# Logs specifiques au site
sudo tail -50 /var/log/nginx/monsite.error.log

# Logs PHP-FPM
sudo tail -50 /var/log/php8.2-fpm.log

# Logs systeme
sudo journalctl -u nginx --since "10 minutes ago"
sudo journalctl -u php8.2-fpm --since "10 minutes ago"

Cause 1 : PHP-FPM est arrete ou plante

C'est la cause la plus frequente. Verifiez le statut :

sudo systemctl status php8.2-fpm

# Si arrete, redemarrez
sudo systemctl restart php8.2-fpm

Verifiez que le socket existe :

ls -la /run/php/php8.2-fpm.sock

Si le socket n'existe pas, PHP-FPM a plante. Consultez les logs pour comprendre pourquoi (manque de memoire, erreur fatale PHP...).

Cause 2 : Mauvaise configuration du upstream

Verifiez que Nginx pointe vers le bon socket ou port :

# Configuration socket (recommande)
location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

# OU configuration TCP
location ~ \.php$ {
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Verifiez que PHP-FPM ecoute sur le meme socket/port :

sudo cat /etc/php/8.2/fpm/pool.d/www.conf | grep listen
# listen = /run/php/php8.2-fpm.sock

Cause 3 : Timeout upstream

Si votre application met trop de temps a repondre, Nginx coupe la connexion. Augmentez les timeouts :

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_read_timeout 300;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 300;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Pour un proxy Node.js :

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_read_timeout 300;
    proxy_connect_timeout 60;
    proxy_send_timeout 300;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

Cause 4 : Manque de memoire

PHP-FPM ou Node.js peut etre tue par l'OOM killer :

# Verifier l'OOM killer
sudo dmesg | grep -i "out of memory"
sudo dmesg | grep -i "killed process"

# Memoire disponible
free -h

Attention : vérifiez bien deux fois avant d'appliquer en production.

Si c'est le cas, reduisez le nombre de workers PHP-FPM dans /etc/php/8.2/fpm/pool.d/www.conf :

pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 500

Formule : max_children = RAM disponible / memoire par processus PHP (generalement 30-50 Mo par processus).

Cause 5 : Taille des buffers insuffisante

Si les headers de reponse sont trop grands :

upstream sent too big header while reading response header from upstream

Augmentez les buffers Nginx :

fastcgi_buffer_size 32k;
fastcgi_buffers 8 16k;
fastcgi_busy_buffers_size 32k;

# Pour proxy_pass
proxy_buffer_size 32k;
proxy_buffers 8 16k;
proxy_busy_buffers_size 32k;

Cause 6 : Application Node.js qui plante

# Verifier si le processus tourne
sudo systemctl status monapp

# Voir les logs
sudo journalctl -u monapp -f

# Relancer avec pm2
pm2 restart monapp
pm2 logs monapp

Checklist de resolution rapide

# 1. Verifier les services
sudo systemctl status nginx php8.2-fpm

# 2. Tester la config Nginx
sudo nginx -t

# 3. Verifier les logs
sudo tail -20 /var/log/nginx/error.log

# 4. Verifier la memoire
free -h

# 5. Redemarrer si necessaire
sudo systemctl restart php8.2-fpm nginx

La plupart des erreurs 502 se resolvent en verifiant que le service upstream est bien actif et correctement configure.

# Articles similaires

// newsletter

Cet article vous a aide ? Recevez les prochains par email.