Nginx Proxy 経由でバックエンドに繋がらないときの確認ポイント

  • URLをコピーしました!
目次

はじめに

Nginx をリバースプロキシとして利用していると、バックエンドサーバーに接続できない というエラーに直面することがあります。
たとえば、以下のような症状です。

  • 502 Bad Gateway が表示される
  • ブラウザがタイムアウトする
  • Nginx のエラーログに connect() failed (111: Connection refused) が出る

この記事では、Nginx Proxy 経由で接続できないときの確認ポイントを 具体的なコマンド例・正常/異常の出力例 とともに整理します。

確認ポイント一覧

確認項目正常例異常例対応する解決方法
バックエンドサービスが起動しているかsystemctl status で Active: runninginactive / failedサービスを再起動する
バックエンドのポートが LISTEN 状態かss/netstat に該当ポートが表示されるポートが表示されないバックエンド設定や起動オプションを修正
Nginx の proxy_pass 設定が正しいか設定ファイルに proxy_pass http://127.0.0.1:8080; と記載ポート番号やホストが誤っているnginx.conf を修正後、設定テストと再起動
ファイアウォールで遮断されていないかfirewall-cmd / iptables でポートが許可済み該当ポートが閉じているファイアウォール設定で許可を追加
SELinux の制約がないかgetenforce が Permissive/DisabledEnforcing で httpd_can_network_connect=offSELinux ポリシーを変更して許可

詳細な確認方法と解決策

1. バックエンドサービスが起動しているか確認

systemctl status backend.service
  • ✅ 正常例 Active: active (running) since ...
  • ❌ 異常例 Active: inactive (dead) Active: failed

➡ 解決方法:

systemctl start backend.service
systemctl enable backend.service

2. バックエンドが正しいポートで LISTEN しているか確認

ss -lntp | grep 8080
  • ✅ 正常例 LISTEN 0 128 127.0.0.1:8080
  • ❌ 異常例(出力なし)

➡ 解決方法:
アプリケーション設定ファイルでポートを修正し、再起動。

3. Nginx の proxy_pass 設定を確認

cat /etc/nginx/conf.d/proxy.conf
  • ✅ 正常例 location / { proxy_pass http://127.0.0.1:8080; }
  • ❌ 異常例(ホスト名やポートが違う)

➡ 解決方法:
設定を修正してテスト後リロード。

nginx -t
systemctl reload nginx

4. ファイアウォールでポートが許可されているか確認

firewall-cmd --list-ports
  • ✅ 正常例 8080/tcp
  • ❌ 異常例(ポートが含まれない)

➡ 解決方法:

firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload

5. SELinux の制約を確認

getenforce
  • ✅ 正常例 Permissive Disabled
  • ❌ 異常例 Enforcing

➡ 解決方法:

setsebool -P httpd_can_network_connect on

まとめ

Nginx Proxy 経由でバックエンドに繋がらない場合は、以下の流れで調査するのが効率的です。

  1. バックエンドが動いているか(systemctl)
  2. ポートが LISTEN しているか(ss/netstat)
  3. Nginx の設定が正しいか(nginx.conf)
  4. ファイアウォールで許可されているか
  5. SELinux による制約がないか

それぞれの確認で「正常例」と「異常例」を比較しながら進めることで、問題の切り分けが容易になります。

目次