Solution aux erreurs 502 Bad Gateway et 504 Gateway Timeout sur le serveur Linux
Un guide étape par étape pour résoudre les problèmes de Nginx, Apache, PHP-FPM et de délai d'attente des services.
vu sur les sites internet 502 Mauvaise passerelle et 504 Délai d'expiration de la passerelle des erreurs se produisent généralement parce que le serveur Web ne reçoit pas la réponse correcte du service back-end. Ce service peut être PHP-FPM, un backend Apache, une application Node.js, un service API de panneau de jeu ou une autre application derrière le proxy.
Ces erreurs sont particulièrement courantes dans l'hébergement, le panneau de jeu, WHMCS, Pterodactyl, le panneau d'administration personnalisé et les systèmes de lancement Web.
1. Différence entre les erreurs 502 et 504
- 502 Passerelle incorrecte : Le serveur Web ne peut pas se connecter au service backend ou reçoit une réponse tronquée.
- 504 Délai d'expiration de la passerelle : Le service backend semble répondre, mais la réponse n'est pas renvoyée à temps.
Ainsi, 502 est davantage un crash de connexion/service, et 504 est un problème de lenteur ou de délai d'attente.
2. Vérification des statuts des services
Tout d’abord, vérifiez si le serveur Web et les services PHP sont en cours d’exécution.
systemctl status nginx systemctl status apache2 systemctl status php-fpm
Sur les systèmes CentOS, AlmaLinux ou Rocky Linux, le service PHP-FPM peut être nommé :
systemctl status php-fpm systemctl status httpd
Si le service s'est arrêté, redémarrez-le :
systemctl restart nginx systemctl restart php-fpm
3. Examen des fichiers journaux
Il n'est pas correct de procéder à des suppositions pour les erreurs 502 et 504. Le fichier journal montre la véritable cause de l'erreur.
tail -n 100 /var/log/nginx/error.log tail -n 100 /var/log/apache2/error.log
Sur les systèmes basés sur CentOS :
tail -n 100 /var/log/httpd/error_log
Les déclarations suivantes peuvent être vues dans les journaux :
- connect() a échoué : Impossible de se connecter au service backend.
- le délai amont a expiré : Le service backend répond en retard.
- connexion refusée : Le service est en panne ou le transfert est effectué vers le mauvais port.
- autorisation refusée : Il y a un problème d’autorisation de socket ou de fichier.
4. Prise PHP-FPM ou contrôle de port
Nginx se connecte à PHP-FPM via un socket ou un port. Le chemin PHP-FPM dans le fichier de configuration Nginx et la valeur d'écoute réelle de PHP-FPM doivent être identiques.
grep -R "fastcgi_pass" /etc/nginx/sites-enabled/ grep -R "listen =" /etc/php/*/fpm/pool.d/www.conf
Par exemple si Nginx utilise :
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
La même socket doit être écoutée côté PHP-FPM :
listen = /run/php/php8.2-fpm.sock
5. Augmentation des paramètres de délai d'attente
Des erreurs 504 peuvent être reçues dans de grands panneaux de traitement, des marchés de jeu, des API ou des scripts PHP à exécution lente. Les valeurs de délai d'attente de Nginx peuvent être augmentées.
nano /etc/nginx/nginx.conf
Les valeurs suivantes peuvent être ajoutées au bloc http ou au bloc serveur correspondant :
proxy_connect_timeout 300; proxy_send_timeout 300; proxy_read_timeout 300; fastcgi_read_timeout 300;
Testez les paramètres et redémarrez Nginx :
nginx -t systemctl restart nginx
6. Vérification des limites du processus PHP-FPM
Lorsque le trafic augmente, les limites de transactions PHP-FPM peuvent s'avérer insuffisantes. Dans ce cas, les demandes sont mises en file d'attente et un délai d'attente se produit.
nano /etc/php/8.2/fpm/pool.d/www.conf
Exemples de paramètres :
pm = dynamic pm.max_children = 30 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 10
Ces valeurs doivent être ajustées en fonction de la quantité de RAM du serveur. Définir une valeur trop élevée augmente la consommation de RAM.
Erreurs courantes
- Modifier les paramètres sans consulter le fichier journal
- Ne pas mettre à jour le chemin du socket Nginx même si la version PHP a changé
- Ne pas corriger la requête lente en augmentant le délai d'attente
- Augmenter les limites PHP-FPM sans calculer la RAM
- Redémarrer le service sans tester la configuration Nginx
FAQ
L’erreur 502 est-elle toujours causée par Nginx ?
Non, Nginx est juste celui qui affiche l'erreur. Le vrai problème peut provenir de PHP-FPM, du backend Apache, de l'application Node.js ou d'un autre service.
L'augmentation du délai d'attente est-elle la solution définitive aux erreurs 504 ?
Pas toujours. L'augmentation du délai d'attente offre un soulagement temporaire. La vraie solution consiste à trouver le problème de requête lente, de traitement lourd ou de performances.
Est-il sécuritaire de redémarrer PHP-FPM ?
C'est généralement sûr, mais les requêtes actives peuvent être affectées pendant une courte période. Dans les systèmes très fréquentés, les heures de faible trafic doivent être privilégiées.
Recommandations de performances
- Vérifiez régulièrement la version de PHP-FPM et le chemin du socket.
- Examinez les journaux de requêtes lentes dans le panneau Web et les services API.
- Si la RAM est insuffisante, n'augmentez pas inconsciemment la valeur PHP-FPM max_children.
- Réduisez la charge du backend en utilisant un système de cache.
- Gérez les journaux d’erreurs avant qu’ils ne s’agrandissent avec logrotate.
Cet article est spécialement préparé pour PvPServer.