目次
概要
Nginx をリバースプロキシとして利用する際に、クライアントに 502 Bad Gateway が返ることがあります。
これは 「Nginx がバックエンドサーバーと通信できなかった」 ことを示すエラーです。
原因は複数考えられますが、確認手順を踏めば切り分けが可能です。
以下では確認項目ごとに「正常例」「異常例」「原因と解決策」を整理します。
確認項目と解決方法
1. バックエンドサーバーは起動しているか
確認コマンド
ps aux | grep <process名>
curl http://127.0.0.1:ポート番号
- 正常例
$ curl http://127.0.0.1:8080
Hello World
→ アプリが稼働中で応答がある
- 異常例
$ curl http://127.0.0.1:8080
curl: (7) Failed to connect to 127.0.0.1 port 8080: Connection refused
→ アプリが停止中、または待ち受けポートが違う
- 原因と解決方法
- アプリケーションが停止 → サービスを再起動(
systemctl start <サービス名>
) - 異常終了している → アプリケーションログを調査し修正
- アプリケーションが停止 → サービスを再起動(
2. Nginx とバックエンドのポート設定は一致しているか
確認コマンド
cat /etc/nginx/conf.d/*.conf | grep proxy_pass
ss -lntp | grep <ポート番号>
- 正常例
proxy_pass http://127.0.0.1:8080;
LISTEN 0 128 127.0.0.1:8080
→ Nginx とバックエンドのポートが一致
- 異常例
proxy_pass http://127.0.0.1:8081;
LISTEN 0 128 127.0.0.1:8080
→ Nginx 側は 8081、バックエンドは 8080 で不一致
- 原因と解決方法
- Nginx 設定 (
proxy_pass
) を修正 - バックエンドの待ち受けポートを変更して一致させる
- Nginx 設定 (
3. バックエンドの応答速度は遅すぎないか
確認コマンド
curl -w "%{time_total}\n" -o /dev/null -s http://127.0.0.1:8080
tail -f /var/log/nginx/error.log
- 正常例
0.052 # 0.1秒以内に応答
- 異常例
5.234 # 数秒以上かかる
[error] upstream timed out (110: Connection timed out) while reading response header from upstream
- 原因と解決方法
- アプリ側の処理が遅い → クエリ最適化 / キャッシュ導入
- Nginx のタイムアウトが短い →
proxy_read_timeout
を延長
4. Firewall / SELinux による通信ブロック
確認コマンド
telnet 127.0.0.1 8080
firewall-cmd --list-all
grep nginx /var/log/audit/audit.log
- 正常例
Trying 127.0.0.1...
Connected to 127.0.0.1.
- 異常例
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
または SELinux ログに deny 記録あり
- 原因と解決方法
- Firewall で該当ポートを開放
- SELinux →
setsebool -P httpd_can_network_connect 1
を設定
5. FastCGI / PHP-FPM との連携異常
確認コマンド
systemctl status php-fpm
tail -f /var/log/nginx/error.log
- 正常例
Active: active (running)
Nginx error.log に関連エラーなし
- 異常例
connect() to unix:/run/php-fpm/www.sock failed (2: No such file or directory)
- 原因と解決方法
php-fpm
が停止している → サービス再起動- Nginx の
fastcgi_pass
と PHP-FPM のlisten
設定が不一致 → 修正
まとめ
502 Bad Gateway は 「Nginx ⇔ バックエンド間の通信不全」 が原因です。
確認手順と対応のマッピングは以下の通りです:
確認項目 | 異常例 | 主な原因 | 解決方法 |
---|---|---|---|
バックエンド起動確認 | Connection refused | アプリ停止 | サービス再起動・ログ確認 |
ポート一致確認 | proxy_pass と待受ポート不一致 | 設定ミス | Nginx / アプリの設定修正 |
応答速度確認 | upstream timed out | 遅延 | アプリ最適化 / タイムアウト延長 |
Firewall / SELinux | 接続拒否 | セキュリティ制御 | ポート開放 / SELinux 設定 |
FastCGI / PHP-FPM | sock failed | php-fpm 停止 / 設定不一致 | サービス再起動 / 設定修正 |
✅ この手順で「どの確認結果がどの原因・解決策につながるか」が明確に判断できます。
あわせて読みたい


Docker コンテナ内でのファイル I/O エラーの原因と対処
はじめに Docker コンテナ内でファイルを読み書きしようとしたときに、以下のような I/O エラーが発生することがあります。 Permission denied Read-only file system N…
あわせて読みたい


Docker ホストとコンテナ間でファイル共有できないときの対処
はじめに Docker ではホストとコンテナの間でファイルを共有するために ボリュームマウント や バインドマウント を利用します。しかし、設定や権限の問題で「ファイル…