【解決方法】Dockerのnginx-proxyを経由するとアクセス元のIPが正しく取得できない件について
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
リバースプロキシを立てると、アクセス元の正しいIPが取得できなかったため 取得させるための設定をメモします。
環境
- CentOS 7.4
- Docker 18.03
概要
Dockerのnginx-proxyのコンテナをリバースプロキシとして設置し
それぞれのコンテナへ別々のホストを立てリクエストを振り分けました。
webブラウザからa.hoge.jpへアクセスすると
アクセス元のIPがnginx-proxyのIPからアクセスしたことになってしまい
適切なアクセス元を取得出来ませんでした。
nginx-proxy
https://github.com/jwilder/nginx-proxy
解決方法
以下の対応で解決しました。
- nginx-proxyの設定にX-Forwarded-Forを設定
- a.hoge.jp側の設定
nginx-proxyの設定にX-Forwarded-Forを設定
X-Forwarded-Forとは?
HTTPヘッダの一つでロードバランサやプロキシを経由する際に
クライアントの送信元IPアドレスを特定する際のデファクトスタンダードです。
設定ファイルに下記を追記します。
/etc/nginx/conf.d/default.confserver {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
a.hoge.jp側の設定
x-forwarded-forは偽装可能なので、信頼できるところ以外からは
real_ip_headerを使わないようにするための設定です。
<nginx-proxyのIP>はnginx-proxyのIPに置き換えてください。
/etc/nginx/conf.d/default.confserver {
set_real_ip_from <nginx-proxyのIP>;
real_ip_header X-Forwarded-For;
}
著書
トラブルシュートKubernetes で Pod が CrashLoopBackOff の原因と切り分け手順
使い方Redis Docker Compose 構築:永続化・監視・TLS まで 1 ファイルで
使い方Docker イメージ署名と検証:cosign でサプライチェーンを防衛する運用手順
トラブルシュートDocker で DNS 解決に失敗する時の原因と対処:overlay2・systemd-resolved・WSL2 対応
チートシートDocker コマンド早見表:build/run/exec/logs/prune を 1 枚で網羅
検証・比較Docker vs Podman vs nerdctl 徹底比較:CLI 互換性・rootless・企業導入の勘所
使い方Nginx キャパシティプランニング:worker_processes/connections/reuseport の算定メソッド
チートシートNginx 変数 100 選:$request_id/$upstream_status/$ssl_protocol ほか即戦力まとめ
使い方Nginx 画像最適化環境の構築:image_filter モジュールでリサイズ/WebP 変換
トラブルシュートNginx “upstream prematurely closed connection” の原因切り分けと対処
チートシートNginx Worker とイベントループ徹底解説:epoll/kqueue が高速化を生む理由
チートシートNginx ディレクティブ早見表:server/location/if/map の評価順序と落とし穴
使い方Orca の使い方: Claude Code のサブスクリプションのまま使える。最初に変える設定は権限
チートシートCodex の料金プラン一覧: Plus の5時間の枠は、GPT-6.1 Sol で応答160〜200回だった
挙動Codex の sandbox の設定: read-only でも .env は読める。モードごとにできること
チートシートClaude Code のスラッシュコマンド一覧: 2.1.311 の / に出るコマンドを、用途別に並べた
チートシートOllama のコマンド一覧: run は、入っていないモデルなら pull から始める。よく使う10個の違い
使い方Mermaid CLI(mmdc)のインストールと使い方: 10枚の図は、1つの Markdown にまとめると4倍速く書き出せた

