目次
- はじめに
- 重要なポイント
- 502 Bad Gateway エラーについて
- PHP-FPMの用途は何ですか?
- 一般的な原因と解決策
- 502 Bad Gatewayが発生する原因
- Hosted Graphiteによるプロアクティブモニタリング
- 502エラーの解決方法
- まとめ
1. はじめに
PHP-FPMでNGINXを使用している際に502 Bad Gatewayエラーが発生すると、イライラしませんか?このガイドでは、このエラーの一般的な原因を詳しく調べ、問題を効果的に診断・解決するための実用的な手順を紹介します。
NGINXエラーの502 Bad Gatewayは、ウェブサイトユーザーにとってよくあるエラーです。このエラーにはさまざまな原因と解決方法があります。
PHP-FPMによって引き起こされるNGINX 502 Bad Gatewayエラーを防止およびトラブルシューティングするには、サーバーのパフォーマンスをリアルタイムで可視化することが重要です。TelegrafまたはOpenTelemetryを使用してNGINXを監視することで、ユーザーに影響を与える前に問題を検出して解決する方法を学びましょう。
- Step-by-Step Guide to Monitoring Your NGINX Webservers with Telegraf
- Monitor NGINX Performance with OpenTelemetry
MetricFireのプラットフォームを使用して、システムのパフォーマンスを分析し、エラーのトラブルシューティングを行います。 MetricFire とそれをシステムに統合する方法の詳細情報については、当社のチームによるデモを予約してください。MetricFire の無料トライアルはこちら。
2. 重要なポイント
- NGINX エラー 502 Bad Gateway は、サーバーが別のサーバーからエラーを受信しているため PHP-FPM に接続できない、または PHP-FPM が応答していないことを示すエラーメッセージです。
- NGINX と PHP-FPM を併用すると、ウェブサイトのパフォーマンスが向上し、リソース消費を削減できます。
- このエラーの原因としては、NGINX または PHP-FPM が実行されていない、ファイアウォールがリクエストをブロックしている、ドメイン名が許可されていない、サーバーが利用できないなどが考えられます。
- このエラーを解決するには、ウェブサイト訪問者はページをリロードする、ブラウザのキャッシュをクリアして Cookie を削除する、別のブラウザを使用する、ルーターを再起動するなどの方法があります。
- MetricFire のプラットフォームは NGINX のステータスを監視でき、Telegraf プラグインを使用すると、NGINX サーバーのステータスと 502 エラーを視覚化できます。
3. 502 Bad Gateway エラーについて
502 Bad Gateway エラーは、リバースプロキシとして動作している NGINX が、上流サーバー(この場合は PHP-FPM)から無効な応答を受信したことを示します。これは通常、NGINX が PHP-FPM との接続を確立できなかったか、PHP-FPM が適切な応答を返さなかったことを意味します。
502 Bad Gateway エラーは、アクセス先のサーバーが別のサーバーからエラーを受信したことを意味します。これは、あるサーバーが別のサーバーから情報を受信するためにプロキシとして動作している場合に発生します。別のサーバーに接続すると、エラーが返されます。NGINX は、PHP-FPM に接続できない場合、または PHP-FPM が応答しない場合に、502 エラーを返します。
502 エラーは、サイトによって異なる名前で表示されます。例:
- HTTP Error 502 - Bad Gateway.
- HTTP 502.
- 502 Service Temporarily Overloaded.
- Temporary Error (502).
- 502 Bad Gateway NGINX.
- 502 Bad Gateway.
- Error 502.
- 502 Proxy Error.
また、502エラーを表示するページの外観は、404エラーの場合と同様に、サイトごとにカスタマイズできます。502エラーにはさまざまな原因があります。以下では、主な原因と、このエラーの解決方法をご紹介します。
4. PHP-FPMの用途は何ですか?
PHP-FPM(PHP-FastCGI Process Manager)は、PHPアプリケーション用のWebリクエスト処理ツールです。NGINXと組み合わせることで、PHP-FPMはウェブサイトのパフォーマンスを大幅に向上させ、リソース消費を削減できます。
PHP-FPMを使用する場合、PHPは独立したサービスとして動作します。WebリクエストはTCP/IPソケット経由で処理され、NGINXはHTTPリクエストのみを処理し、PHP-FPMはPHPコードを解釈します。効率を向上させるには、別々のサービスを使用することが不可欠です。
5. 一般的な原因と解決策
1. PHP-FPM サービスが実行されていない
PHP-FPM が実行されていない場合、NGINX はリクエストを PHP-FPM に転送できず、502 エラーが発生します。metricfire.com+2metricfire.com+2metricfire.com+2
PHP-FPM のステータスを確認します。
systemctl status php-fpm
サービスが非アクティブな場合は、開始します。
sudo systemctl start php-fpm
2. NGINX が PHP-FPM に接続できない
NGINX の設定ミスにより、PHP-FPM.metricfire.com+2metricfire.com+2metricfire.com+2 に接続できない場合があります。
NGINX の設定を確認してください。
NGINX の設定にある fastcgi_pass ディレクティブが PHP-FPM のリスニングアドレスと一致していることを確認してください。例:
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
PHP-FPM が Unix ソケットをリッスンするように設定されている場合は、それに応じて調整します。
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
3. PHP-FPM のタイムアウト設定
長時間実行される PHP スクリプトはタイムアウト設定を超え、PHP-FPM がプロセスを途中で終了させる可能性があります。metricfire.com+1metricfire.com+1
タイムアウト設定の調整:
PHP-FPM プール設定 (例: /etc/php/7.4/fpm/pool.d/www.conf) で、request_terminate_timeout の値を増やすことを検討してください。
request_terminate_timeout = 60s
4. リソースの制限
サーバーの負荷が高い場合やリソースが不足している場合、PHP-FPM が応答しなくなることがあります。
サーバーリソースの監視:
top、htop、vmstat などのツールを使用して、CPU とメモリの使用状況を監視します。リソースが限界に達している場合は、アプリケーションの最適化、サーバーリソースのアップグレード、またはキャッシュメカニズムの実装を検討してください。
5. ファイアウォールまたはセキュリティソフトウェアの干渉
ファイアウォールまたはセキュリティソフトウェアが、NGINX と PHP-FPM 間の通信をブロックしている可能性があります。
ファイアウォール設定の確認:
必要なポート(例:PHP-FPM の場合は 9000)が開いており、ファイアウォールルールによってブロックされていないことを確認してください。
6. DNS 解決の問題
NGINX がホスト名を使用して PHP-FPM に接続するように設定されている場合、DNS 解決に失敗すると 502 エラーが発生する可能性があります。
DNS 解決のテスト:
dig コマンドまたは nslookup コマンドを使用して、ホスト名が正しく解決されていることを確認します。
6. 502 Bad Gateway が発生する原因
502 Bad Gateway が発生する原因として考えられるものをいくつか見てみましょう。
NGINX が実行されていない
502 エラーが発生した場合は、NGINX が実行されているかどうかを確認してください。確認するには、次のコマンドを実行します。
systemctl status nginx
レスポンスでステータスが非アクティブ(dead)になっている場合は、NGINX を起動する必要があります。
PHP-FPM が実行されていない
502 エラーの原因は、PHP-FPM が実行されていないことです。Linux をご利用の場合は、以下のコマンドを使用して PHP-FPM が実行されているかどうかを確認できます。
ps aux | grep php-fpm
このコマンドを実行しても PHP-FPM プロセスが表示されない場合は、PHP-FPM を実行してエラー 502 を解決する必要があります。
PHP-FPM のタイムアウト
サーバーの応答に時間がかかりすぎる場合、PHP-FPM のタイムアウトが原因で 502 エラーが発生する可能性があります。この場合、PHP-FPM は応答を送信する前に接続を閉じ、NGINX は 502 エラーを返します。この問題を解決するには、PHP-FPM のタイムアウト値を増やすか、アプリケーションを調査して、長時間応答しない理由を突き止める必要があります。
ファイアウォールがリクエストをブロック
ファイアウォールによって、エッジサーバーとオリジンサーバー間の通信がブロックされることがあります。一部の DDoS 対策システムや CMS のセキュリティプラグインによって、サーバーリクエストがブロックされることがあります。
ドメイン名は許可されていない
ドメイン名が指定された IP アドレスまたはすべての IP アドレスに解決されません。この場合、DNS サーバーを変更し、変更が反映されてグローバルに有効になるまで待つ必要があります。
サーバーが利用できない状態
元のサーバーがダウンしているか、このサーバーに接続できていないことがあります。
7. MetricFireのHosted Graphiteによるプロアクティブモニタリング
MetricFireでNGINXのステータスを視覚化できることをご存知ですか?MetricFireは時系列メトリクスを取り込むため、Graphiteが取り込める形式でメトリクスを送信していただければ、Telegraf NGINXプラグインを使用してNGINXとMetricFireを統合できます。このエージェントを使用すると、502エラーとNGINXサーバーのステータスを確認できます。より詳細な情報を得て、NGINXサーバーの502エラーを解決するには、MetricFireの14日間無料トライアルにサインアップし、チュートリアルに従ってNGINXデータをアカウントに送信してください。
#8. 502エラーの解決方法
502エラーは、ほとんどの場合、ウェブサイト側の問題が原因で発生します。ただし、原因がユーザーのデバイスにある場合もあります。接続に問題があるのは自分だけなのか、それとも他のユーザーがこのウェブサイトに接続できないのかを確認できます。そのためには、サイトの状態と動作を確認するツールを使用します。例えば、isitdownrightnow.com、downforeveryoneorjustme.comなどのツールを使用します。502エラーの原因について詳しく知るには、コンピューター上のNGINXログファイル(/var/log/nginx/error.log)を調べることができます。
訪問者として
接続の問題を経験しているのが自分だけの場合、ウェブサイト訪問者として502エラーを解決するためにできることがいくつかあります。
- ブラウザでページを再読み込みします。502エラーは一時的なものであることが多く、再起動するだけで改善することがあります。
- ブラウザのキャッシュをクリアし、Cookieを削除します。ブラウザは古いファイルや破損したファイル、データを保存する場合があり、これらが502エラーの原因となることがあります。
- 別のブラウザをお試しください。エラーは、現在使用しているブラウザでのみ発生し、他のブラウザでは発生しない可能性があります。
- パソコンとネットワーク機器を再起動してください。再起動後にエラーが解消される可能性があります。
- ブラウザのプラグインと拡張機能を確認してください。プラグインや拡張機能を使用していて、他のブラウザではウェブサイトが動作する場合、それらが接続をブロックしている可能性があります。インストールされているプラグインと拡張機能をすべて無効にして、接続を再確認してください。
- DNSサーバーを変更してください。DNSサーバーを変更すると、502エラーが解決する場合があります。OpenDNSまたはGoogle DNSサーバーを選択できます。
開発者として
ほとんどの場合、502エラーはウェブサイトに問題があるため、すべてのユーザーに表示されます。ウェブ開発者として、以下の対策を講じることができます。
- サーバーが利用可能かどうかを確認してください。
- ファイアウォールのログで異常なクラッシュが発生していないか確認してください。
- Cloudflareを使用している場合、一定の制限に達すると、訪問者に502 Bad Gatewayエラーが表示されることがあります。 Cloudflare を無効にしてみてください。
MetricFireのHosted Graphiteでシステムメトリクスを監視
堅牢な監視を実装することで、問題が深刻化する前に検出し、対処することができます。
MetricFireの監視ツールを活用する:
MetricFireは、TelegrafやOpenTelemetryなどのツールを提供し、NGINXおよびPHP-FPMのパフォーマンスメトリクスを監視できます。リアルタイムダッシュボードとアラートを設定することで、サーバーの健全性をプロアクティブに管理し、異常に迅速に対応できます。
ボトルネックを特定し、エラー502などのエラーをトラブルシューティングするには、システムのメトリクスとアプリケーションで使用しているテクノロジーを監視することが役立ちます。MetricFireは、システムのメトリクスを監視および分析するためのツールを提供するオープンソースプラットフォームを提供しています。MetricFireは、Hosted GraphiteとHosted Grafanaを提供しています。Grafanaは、Webベースの分析およびデータ視覚化アプリケーションです。ダイアグラム、グラフ、通知などのカスタマイズ可能なダッシュボードを作成できます。MetricFireを使用すれば、Nginxインスタンスを簡単に監視できます。
Grafanaの主な機能をいくつか見てみましょう。
- ダッシュボードテンプレート。テンプレートを使って、まるでコードを書いているかのようにダッシュボードをデザインできます。テンプレートを使えば、異なる環境でも同じデザインを使用できます。
- アノテーション。チャートにログやコメントを手動または自動で追加できます。
- カスタムプラグイン。Grafanaは、基本機能を拡張するための外部プラグインをインストールできます。
- SQLサポート。SQLサポートにより、さまざまなデータソースから簡単にデータを取得できます。
- アラート。Grafanaは重要なインシデントに関する通知をユーザーに送信できます。
Graphiteは、メトリックを収集、保存、処理するためのツールです。Grafanaのデータソースとしても使用できます。Grafanaには高度なGraphiteクエリエディターが搭載されており、さまざまなクエリの作成、関数の追加、関数パラメータの変更、クエリリンクを使用した複雑なネストクエリの受け入れなど、さまざまな操作が可能です。
Hosted GraphiteとGrafanaを使用すると、システムパフォーマンスをリアルタイムで追跡できます。 MetricFireは両方のツール向けのホスティングサービスを提供しており、システムのパフォーマンスに集中し、ブラウザでメトリクスを監視できます。
無料トライアルにご登録いただき、Telegraftエージェントを使用したNGINXインスタンスの監視を今すぐお試しください。また、デモを予約して、MetricFireチームに監視のニーズについて直接ご相談いただくことも可能です。
9. まとめ
PHP-FPM 使用時に NGINX で発生する 502 Bad Gateway エラーは、多くの場合、サービスのダウンタイム、設定ミス、リソース制約などの根本的な問題の兆候です。これらの潜在的な原因を体系的に診断・対処し、MetricFire が提供するようなプロアクティブな監視ソリューションを実装することで、Web アプリケーションの信頼性とパフォーマンスを確保できます。
MetricFire のエキスパートによるデモを予約するか、無料トライアルに今すぐ登録して、当社の機能について詳しくご確認ください。