PHP-FPM(FastCGI Process Manager)は、同時環境の高いPHPにとって重要な実行エンジンであり、Nginxでバックエンドサポートとして広く使用されています。 502の悪いゲートウェイエラーは、通常、NginxとPHP-FPMの間の通信が中断または異常な応答を示していることを示しています。この記事では、複数の側面から考えられる理由と最適化ソリューションを紹介します。
高負荷シナリオでは、PHP-FPMプロセスがリソースの枯渇または不適切な構成によりクラッシュする可能性があり、その結果、要求を処理できなくなり、502エラーが発生します。プロセスステータスを表示して、サービスを再起動してみてください。
$ systemctl status php-fpm
$ systemctl restart php-fpm
PHP-FPMプロセスプールパラメーターが誤って設定されている場合、 MAX_CHILDRENの設定が小さすぎる場合、リクエストがブロックまたは拒否される場合があります。次の構成を確認して最適化することをお勧めします。
$ vim /etc/php-fpm.d/www.conf
推奨される構成は次のとおりです。
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 500
大規模なファイルや複雑なビジネスロジックの処理など、PHPスクリプトが長すぎると、デフォルトのタイムアウト設定では不十分な場合があるため、nginxへの接続が中断されます。
接続タイムアウトは、次のように拡張できます。
$ vim /etc/php-fpm.d/www.conf
設定の提案:
request_terminate_timeout = 180
nginx構成ファイルのfastCGIパスまたはパラメーター設定が正しくない場合、要求を正常に渡すことができず、502エラーをトリガーします。
nginx.confでPHPリクエストの場所構成を確認してください:
$ vim /etc/nginx/nginx.conf
正しい構成例:
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;
}
サーバーのメモリまたはCPUリソースが非常に占有されている場合、PHP-FPMはリクエストに応答する新しいプロセスを作成できず、これも502エラーを引き起こす可能性があります。
次のコマンドを使用して、サーバーリソースの使用を監視できます。
$ top
$ free -m
リソースが不十分であることを確認する場合は、ハードウェア構成のアップグレード、またはコードとキャッシュメカニズムを最適化することでリソースの消費を削減することを検討できます。
PHP-FPM 502エラーを解決するには、プロセスステータス、構成パラメーター、要求の処理時間、NGINXとPHP-FPMの間の通信パス、およびサーバー自体のリソース使用量を包括的に検討する必要があります。合理的な構成とリソースの最適化により、502のエラーを回避できるだけでなく、全体的なサービスの安定性と応答速度も改善できます。