502 Bad Gateway nginxの解決方法【2025年最新版】

502 Bad Gateway nginxの解決方法【2025年最新版】

エラーの概要・症状

502 Bad Gatewayエラーは、Nginxサーバーがリクエストを処理する際に、バックエンドのサーバー(例えば、PHP-FPMやuWSGIなど)からの無効な応答を受け取った場合に発生します。このエラーは、ウェブサイトの運営者や開発者にとって非常に厄介で、ユーザーにとっても不快な体験をもたらします。具体的には、ウェブサイトにアクセスしようとした際に「502 Bad Gateway」と表示され、ページが表示されないことになります。

このエラーが発生すると、ユーザーは「サーバーがダウンしているのか」、「ページが見つからないのか」といった疑問を抱くことになります。また、ウェブサイトの信頼性や可用性が損なわれるため、ビジネスにも悪影響を及ぼす可能性があります。このため、502 Bad Gatewayエラーは迅速に解決する必要があります。

このエラーが発生する原因

502 Bad Gatewayエラーは、さまざまな原因によって発生することがあります。以下では、主要な原因を詳しく説明します。

1. バックエンドサーバーの停止

Nginxはリバースプロキシとして機能し、バックエンドサーバーからのレスポンスを待っています。バックエンドサーバーが停止している場合、Nginxは502エラーを返します。特にPHP-FPMやuWSGIなどのプロセスがクラッシュしていると、このエラーが発生します。

2. 設定ミス

Nginxやバックエンドサーバーの設定ミスも502エラーの原因となります。たとえば、nginx.confファイルでのproxy_pass設定やfastcgi_pass設定が正しくない場合、リクエストが正しく処理されず、502エラーが発生します。

3. アクセス権の問題

SELinuxなどのセキュリティモジュールが有効な場合、Nginxがバックエンドサービスにアクセスできないことがあります。この場合、権限が不足しているためリクエストが拒否され、502エラーが発生します。

4. サーバーのリソース不足

サーバーのメモリやCPUリソースが不足していると、バックエンドサーバーが正しくリクエストに応答できない場合があります。特にトラフィックが急増した際には、この問題が顕著になります。

5. ソケットファイルの問題

uWSGIやPHP-FPMを使用している場合、ソケットファイルのパーミッション設定が不適切であると、Nginxがバックエンドサーバーと通信できず、502エラーが発生することがあります。

解決方法1(最も効果的)

最も効果的な解決策は、SELinuxの設定を確認し、必要に応じて修正することです。以下に具体的な手順を示します。

H3: 手順1-1(SELinuxの設定を確認する)

  1. SELinuxの現在の状態を確認します。以下のコマンドを実行してください。
   sestatus

SELinuxが有効である場合、次のステップに進んでください。

H3: 手順1-2(SELinuxの設定を変更する)

  1. 以下のコマンドを使用して、httpd_can_network_connectを有効にします。
   sudo setsebool -P httpd_can_network_connect 1
  1. 次に、Nginxがバックエンドサーバーに接続できるか確認します。以下のコマンドを実行して、エラーログをチェックします。
   sudo cat /var/log/audit/audit.log | grep nginx | grep denied
  1. エラーが出ている場合、次のコマンドで新しいポリシーを作成します。
   sudo cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
   sudo semodule -i mynginx.pp
  1. 最後に、httpd_can_network_relayも有効にします。
   sudo setsebool -P httpd_can_network_relay 1

H3: 注意点とトラブルシューティング

  • SELinuxの設定を変更することは、セキュリティに影響を与える可能性があるため、十分に理解した上で行ってください。設定変更後、Nginxおよびバックエンドサーバーを再起動することを忘れないでください。
  • Nginxを再起動するには、以下のコマンドを実行します。

解決方法2(代替手段)

もし、SELinuxの設定を変更しても502エラーが解決しない場合、次の方法を試してみてください。

  1. Nginx設定ファイルのfastcgi_passの設定を確認します。
   location ~ \.php$ {
       include fastcgi_params;
       fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   }

ここで、fastcgi_passが正しいパスであることを確認してください。

  1. PHP-FPMが正しく動作しているか確認します。以下のコマンドを実行して、PHP-FPMのステータスを確認します。
   sudo systemctl status php7.4-fpm

ステータスが「active」と表示されていれば、正常に動作しています。

  1. サーバーのリソース状況を確認し、負荷が高い場合には必要なリソースを追加します。特にメモリやCPUの使用状況を確認してください。tophtopコマンドを使って確認できます。

解決方法3(上級者向け)

上級者向けの解決策として、Nginxのソケットファイルのパーミッション設定を見直すことが挙げられます。以下の手順に従ってください。

  1. ソケットファイルのパーミッションを確認します。以下のコマンドを実行します。
   ls -l /var/run/php/php7.4-fpm.sock

ここで、ソケットファイルの所有者とパーミッションが正しいことを確認します。推奨されるパーミッションは660です。

  1. 必要に応じて、以下のコマンドでパーミッションを変更します。
   sudo chmod 660 /var/run/php/php7.4-fpm.sock
  1. NginxとPHP-FPMを再起動します。
   sudo systemctl restart nginx
   sudo systemctl restart php7.4-fpm

エラーの予防方法

502 Bad Gatewayエラーを防ぐためには、以下の予防策を講じることが重要です。

  • **定期的なサーバーメンテナンス**: サーバーのリソース使用状況やエラーログを定期的にチェックし、異常がないか確認します。特に、トラフィックが急増する時間帯には注意が必要です。
  • **セキュリティ設定の見直し**: SELinuxやファイアウォールの設定を定期的に見直し、必要なサービスに対して適切なアクセス権を設定します。
  • **バックアップの実施**: 定期的にバックアップを行い、障害時には迅速に復旧できるようにします。

関連するエラーと対処法

502 Bad Gatewayエラーに関連する他のエラーには、以下のようなものがあります。

  • **504 Gateway Timeout**: バックエンドサーバーが応答しない場合に発生します。タイムアウト設定を見直し、必要に応じて延長します。
  • **500 Internal Server Error**: サーバー内部で何らかのエラーが発生した場合に表示されます。エラーログを確認し、原因を特定します。

まとめ

502 Bad Gatewayエラーは、Nginxとバックエンドサーバー間の通信エラーによって発生します。SELinuxの設定やNginxの設定ミス、サーバーリソース不足などが主な原因です。今回紹介した解決方法を参考に、迅速に問題を解決し、安定したウェブサイト運営を目指しましょう。次のステップとして、定期的なメンテナンスやセキュリティチェックを行い、エラーの再発を防ぐことが重要です。

コメント

タイトルとURLをコピーしました