インフラ・運用 2026.01.05

nginx 502 Bad Gatewayエラーの原因と解決方法完全ガイド

約16分で読めます

サイトに「502 Bad Gateway」エラーが表示されて困っていませんか?PHP-FPMやリバースプロキシ設定の問題から、具体的な診断・解決方法まで実践的に解説します。

こんなトラブルで困っていませんか?

  • サイトに突然「502 Bad Gateway」エラーが表示された
  • WordPressやLaravelサイトにアクセスできない
  • エラーログを見ても原因が分からない
  • PHP-FPMやnginxの設定に不安がある
  • サーバー管理者から「502エラーを解決して」と言われた

3分でこの記事の要点が分かります。Fivenine Designでは20年以上のWeb制作実績で培った、nginx 502エラーの確実な解決方法をお教えします。

nginx 502 Bad Gatewayエラーとは?

502 Bad Gatewayエラーは、nginxがバックエンドサーバー(PHP-FPMなど)からの応答を受け取れない状態を示します。

先月、あるクライアントのECサイトで「朝から注文が一件も入らない」という緊急連絡がありました。確認すると、サイト全体に502エラーが表示されていました。売上に直結する重大なトラブルだったため、即座に原因を特定し、15分で復旧できました。

nginx 502エラーの主要原因(発生頻度別)
出典: Fivenine Design運用実績(過去2年間)

主要原因と診断方法

1. PHP-FPM停止・異常終了(最頻出)

症状: サイト全体が502エラー 診断方法:

# PHP-FPMの状態確認
sudo systemctl status php8.1-fpm

# プロセス確認
ps aux | grep php-fpm

# エラーログ確認
sudo tail -f /var/log/php8.1-fpm.log

解決手順:

# PHP-FPM再起動
sudo systemctl restart php8.1-fpm

# 自動起動設定確認
sudo systemctl enable php8.1-fpm

# 設定ファイル構文チェック
sudo php-fpm8.1 -t

2. タイムアウト設定の問題

症状: 重い処理で502エラーが発生 よくあるケース: WordPressのプラグイン更新、Laravelの大量データ処理

nginx設定例 (/etc/nginx/sites-available/default):

server {
    listen 80;
    server_name example.com;
    root /var/www/html;
    index index.php index.html;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        
        # タイムアウト設定(重要)
        fastcgi_read_timeout 300;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
    }
}

3. ソケット接続設定ミス

nginx設定とPHP-FPM設定の不一致が原因です。

PHP-FPM設定確認 (/etc/php/8.1/fpm/pool.d/www.conf):

[www]
user = www-data
group = www-data

# ソケット設定
listen = /var/run/php/php8.1-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

# プロセス管理
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 1000

接続確認方法:

# ソケットファイル存在確認
ls -la /var/run/php/php8.1-fpm.sock

# 権限確認
stat /var/run/php/php8.1-fpm.sock

# nginxがソケットにアクセスできるか確認
sudo -u www-data test -r /var/run/php/php8.1-fpm.sock && echo "OK" || echo "NG"

実案件での解決事例

ケース1: WordPressサイトの502エラー

あるクライアントの企業サイトで、記事投稿時に必ず502エラーが発生する問題がありました。

原因: メディアファイルのアップロード時にPHP-FPMのメモリ制限に達していました。

解決策:

# /etc/php/8.1/fpm/php.ini
memory_limit = 512M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300

# /etc/php/8.1/fpm/pool.d/www.conf
pm.max_children = 20
pm.max_requests = 500

結果: 投稿エラーが解消され、「安心して記事更新できるようになった」とお客様から好評をいただきました。

ケース2: Laravelアプリケーションの502エラー

ECサイトのLaravelアプリで、商品検索時にランダムに502エラーが発生していました。

原因: upstream設定でのロードバランシング設定ミス

nginx設定改善:

upstream php-backend {
    server unix:/var/run/php/php8.1-fpm.sock weight=1 max_fails=3 fail_timeout=30s;
    # 複数のPHP-FPMプールを使用する場合
    # server unix:/var/run/php/php8.1-fpm-pool2.sock weight=1 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    server_name shop.example.com;
    root /var/www/laravel/public;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass php-backend;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        
        # Laravel向け最適化
        fastcgi_read_timeout 120;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
    }
}
502エラー解決後のサイトパフォーマンス改善
出典: ECサイト改善事例(Fivenine Design)

よくある失敗と注意点

失敗例1: 設定変更後の再起動忘れ

「設定を変更したのに502エラーが続く」というお問い合わせをよくいただきます。設定変更後は必ず関連サービスを再起動してください。

# 正しい再起動手順
sudo nginx -t  # nginx設定チェック
sudo systemctl reload nginx
sudo systemctl restart php8.1-fpm

失敗例2: ログ確認の軽視

エラーログを確認せずに憶測で対応すると、時間を無駄にします。

# 必ず確認すべきログファイル
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/php8.1-fpm.log
sudo tail -f /var/www/html/storage/logs/laravel.log  # Laravel場合

失敗例3: リソース不足の見落とし

サーバーのリソース状況を確認せずに設定変更すると、逆にパフォーマンスが悪化することがあります。

# リソース確認コマンド
free -h        # メモリ使用量
df -h          # ディスク使用量
top            # CPU・メモリの詳細
htop           # より見やすいリソース監視

予防策とモニタリング

監視スクリプトの設置

#!/bin/bash
# /usr/local/bin/check-502-error.sh

LOG_FILE="/var/log/nginx/access.log"
ERROR_COUNT=$(tail -1000 "$LOG_FILE" | grep "502" | wc -l)

if [ $ERROR_COUNT -gt 5 ]; then
    echo "502エラーが頻発しています: $ERROR_COUNT件"
    # メール通知やSlack通知の処理
    systemctl status php8.1-fpm
fi

定期メンテナンス項目

  • 週次: エラーログの確認とローテーション
  • 月次: PHP-FPM設定の見直し
  • 四半期: サーバーリソースの使用状況確認

CMS・フレームワーク別の対策

WordPress向け設定

# WordPress用の最適化設定
location ~ \.php$ {
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    
    # WordPress特有の設定
    fastcgi_read_timeout 300;
    fastcgi_buffer_size 64k;
    fastcgi_buffers 8 64k;
    
    # 管理画面での長時間処理対応
    location ~ ^/wp-admin/.*\.php$ {
        fastcgi_read_timeout 600;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Laravel向け設定

# Laravel用の設定
server {
    listen 80;
    server_name laravel-app.com;
    root /var/www/laravel/public;
    index index.php;

    # Laravel用の基本設定
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        
        # Laravelの大量処理対応
        fastcgi_read_timeout 180;
        client_max_body_size 100M;
    }
    
    # 静的ファイルのキャッシュ設定
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}

まとめ:確実な502エラー解決のために

nginx 502 Bad Gatewayエラーは、原因を正確に特定すれば確実に解決できるトラブルです。

今すぐやるべきこと:

  1. エラーログの確認: /var/log/nginx/error.log/var/log/php-fpm.logをチェック
  2. PHP-FPMの状態確認: systemctl status php-fpmでプロセス状況を確認
  3. 設定ファイルの構文チェック: nginx -tphp-fpm -tで設定ミスがないか確認

重要な点:

  • 憶測ではなく、必ずログを確認する
  • 設定変更後は関連サービスを再起動する
  • 定期的な監視とメンテナンスを怠らない

解決できない場合は

エラーが解決しない場合、無料でご相談ください

詳しく見る

サーバートラブルでお困りの方へ

「502エラーが解決できない」「サーバー設定に不安がある」「緊急でサイトを復旧したい」

そんなときは、Fivenine Designにお任せください

神奈川を拠点に20年以上のWeb制作実績を持つ当社では、nginx・PHP-FPM・Apache等のサーバートラブルを迅速かつ確実に解決いたします。Laravel・WordPress・Next.jsを使った開発で培った豊富な運用経験により、お客様のサイトを安定稼働させます。

  • 24時間以内の緊急対応可能
  • 原因調査から恒久対策まで一括サポート
  • 再発防止のための監視体制構築
  • 中小企業様の予算に合わせた柔軟な提案

まずはお気軽にご相談ください。サーバートラブルによる機会損失を最小限に抑え、安心してビジネスに集中できる環境を提供いたします。

この記事をシェア

この記事の内容でお困りですか?

無料でご相談いただけます

Webサイトの改善、システム開発、AI導入など、 お気軽にご相談ください。初回相談は無料です。

無料相談してみる
AIに無料相談