PHP-FPM (FastCGI Process Manager) est un moteur d'exécution important pour PHP dans un environnement de concurrence élevé et est largement utilisé dans Nginx comme support backend. Une erreur de passerelle 502 indique généralement que la communication entre Nginx et PHP-FPM a une réponse interrompue ou anormale. Cet article présentera des raisons possibles et des solutions d'optimisation à partir de plusieurs aspects.
Dans les scénarios de charge élevée, le processus PHP-FPM peut s'écraser en raison de l'épuisement des ressources ou de la configuration inappropriée, ce qui entraîne l'incapacité de traiter la demande, ce qui entraîne une erreur 502. Vous pouvez afficher l'état du processus et essayer de redémarrer le service:
$ systemctl status php-fpm
$ systemctl restart php-fpm
Si le paramètre PHP-FPM Process Pool est défini mal, si le paramètre Max_Children est trop petit, la demande peut être bloquée ou rejetée. Il est recommandé de vérifier et d'optimiser la configuration suivante:
$ vim /etc/php-fpm.d/www.conf
La configuration recommandée est la suivante:
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 500
Lorsque les scripts PHP sont traités trop longtemps, tels que le traitement des fichiers volumineux ou la logique métier complexe, le paramètre de délai d'expiration par défaut peut ne pas être suffisant, interrompant ainsi la connexion à Nginx.
Le délai d'attente de connexion peut être étendu par:
$ vim /etc/php-fpm.d/www.conf
Suggestions de paramètres:
request_terminate_timeout = 180
Si le paramètre de chemin ou de paramètre FASTCGI dans le fichier de configuration NGINX est incorrect, la demande ne peut pas être transmise avec succès à PHP-FPM, déclenchant une erreur 502.
Veuillez vérifier la configuration de l'emplacement des demandes PHP dans nginx.conf :
$ vim /etc/nginx/nginx.conf
Exemple de configuration correcte:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
Si la mémoire du serveur ou les ressources CPU sont fortement occupées, PHP-FPM ne peut pas créer un nouveau processus pour répondre à la demande, ce qui peut également provoquer une erreur 502.
Vous pouvez surveiller l'utilisation des ressources du serveur via les commandes suivantes:
$ top
$ free -m
Si vous confirmez que les ressources sont insuffisantes, vous pouvez envisager de mettre à niveau la configuration matérielle ou de réduire la consommation de ressources en optimisant le code et le mécanisme de mise en cache.
Pour résoudre les erreurs PHP-FPM 502, nous devons considérer de manière approfondie l'état du processus, les paramètres de configuration, le temps de traitement de la demande, le chemin de communication entre NGINX et PHP-FPM, et l'utilisation des ressources du serveur lui-même. Grâce à une configuration raisonnable et à l'optimisation des ressources, non seulement les erreurs de 502 peuvent être évitées, mais la stabilité globale du service et la vitesse de réponse peuvent également être améliorées.