nginxにおける502 Bad Gatewayエラーの原因と解决方法

nginxで502エラーが発生するケースとその対処法を説明する。

1. 設定ミス

nginxがphp-fpmに接続できない場合、fastcgi_passの指定に問題があることが多い。socket形式またはIP:ポート形式で正しく指定されているか確認が必要。

2. リソース不足

LNMP構成において、nginxからのリクエストがphp-fpmの処理能力を超過すると、子进程が不足し502エラーが発生する。

解决方法:php-fpm.confのpm.max_childrenパラメータを調整する。メモリに応じた適切な値を設定すること。

  • メモリ4GB(php-fpm+nginx、Mysqlなし):pm.max_children = 150
  • メモリ8GB:pm.max_children = 300
  • これを目安にメモリ量に比例して増減させる

3. エラーログによる調査

nginxのエラーログを確認することで、問題の根本原因を特定できる。

vim /usr/local/nginx/logs/nginx_error.log

ログレベルはnginx.confで設定可能。crit(厳格)からdebug(詳細)まで変更できるが、debugはログ量が膨大になるため注意。

4. 設定手順

nginx設定ファイル

バーチャルホスト設定ファイルを作成する。

vim /usr/local/nginx/conf/vhosts/test.conf

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

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
    }
}

設定ファイルの構文を確認後、リロードする。

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

php-fpm設定ファイル

socketファイルの所有者とnginx実行用户在一致させる必要がある。

vim /usr/local/php/etc/php-fpm.conf

[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log

[www]
listen = /tmp/php-fpm.sock
user = www-data
group = www-data
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 150
pm.start_servers = 30
pm.min_spare_servers = 10
pm.max_spare_servers = 50
pm.max_requests = 1000
rlimit_files = 2048

設定完了後、php-fpmを再起動する。

/etc/init.d/php-fpm restart

5. socketファイルのパーミッション問題

PHP 5.4以降では、socketファイルのデフォルト権限が 소유者の読み取りのみとなっている。nginx実行用户(www-data)がsocketを読み取れない場合、502エラーが発生する。

解決策として、php-fpm.confでsocketの所有者とグループを設定する方法がある。

listen.owner = www-data
listen.group = www-data

または、パーミッションを直接指定する方法もある。

listen.mode = 0660

どちらの方法でも、nginxがsocketファイルにアクセスできるように設定すれば、502エラーを回避できる。

タグ: nginx php-fpm 502エラー FastCGI socket

Sun, 10 May 2026 08:41:43 +0900 投稿