手帳

  • 2025-10-14
  • IT系

nginx-proxyとApacheで実IPアドレスを取得する方法(基礎編)

リバースプロキシを使ったWordPress環境で、アクセスログに訪問者の実IPアドレスが記録されず困っていませんか?この記事では、nginx-proxy + Apache環境で実IPを正しく取得する方法を、初心者にもわかりやすく解説します。

問題:ログに内部IPしか記録されない

WordPressのアクセスログを見ると、すべて 172.18.0.4 という同じIPアドレスになっている…これは実際の訪問者のIPアドレスではなく、nginx-proxyコンテナの内部IPなんです。

なぜこうなるのか?

リバースプロキシを使っている環境では、以下のような構成になっています:

インターネット → nginx-proxy → Apache → WordPress
                (リバースプロキシ)  (Webサーバー)

訪問者はまずnginx-proxyに接続し、nginx-proxyがApacheに転送します。だからApacheから見ると、「nginx-proxyから接続されている」ように見えてしまうんです。

解決の鍵:HTTPヘッダー

でも安心してください。実際の訪問者のIPアドレスは、HTTPヘッダーに含まれて送られているんです。

HTTPヘッダーとは?

HTTPヘッダーは、WebブラウザとWebサーバーがやり取りする際に送る「付箋メモ」のようなものです:

GET /index.html HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
X-Real-IP: 203.0.113.45           ← ここに実IPが入っている!
X-Forwarded-For: 203.0.113.45

この X-Real-IPX-Forwarded-For に、実際の訪問者のIPアドレスが入っているんです。nginx-proxyが自動的に付与してくれます。

nginx変数の命名規則

nginxの設定を見ると、$http_cf_connecting_ip$remote_addr といった変数が出てきます。これらには決まったルールがあります。

HTTPヘッダー名nginx変数名
X-Real-IP$http_x_real_ip
X-Forwarded-For$http_x_forwarded_for
CF-Connecting-IP$http_cf_connecting_ip
User-Agent$http_user_agent

変換ルール:

  1. 最初に $http_ を付ける
  2. ヘッダー名を小文字にする
  3. ハイフン - をアンダースコア _ に変える

例えば CF-Connecting-IP というヘッダーは:

  • $http_ を付けて → $http_CF-Connecting-IP
  • 小文字にして → $http_cf-connecting-ip
  • ハイフンを _ にして → $http_cf_connecting_ip

Cloudflareって何?

Cloudflareは、Webサイトとインターネットの間に入って、セキュリティやスピードを向上させるサービスです。

Cloudflareを使っている場合

訪問者 → Cloudflare → nginx-proxy → Apache
(実IP)   (CFのIP)

Cloudflareを使っていない場合

訪問者 → nginx-proxy → Apache
(実IP)

Cloudflareが送る特別なヘッダー

Cloudflare経由のアクセスでは、以下のヘッダーが追加されます:

CF-Connecting-IP: 203.0.113.45    ← 実際の訪問者のIP(最も信頼できる!)
CF-Ray: 8a1b2c3d4e5f
CF-IPCountry: JP
X-Forwarded-For: 203.0.113.45, 104.21.x.x

X-Forwarded-For は誰でも偽装できますが、CF-Connecting-IP はCloudflareだけが設定できるので安全なんです。

次回予告

次回の記事では、TRUST_DOWNSTREAM_PROXY という設定の謎と、Cloudflare使用サイトと直接アクセスサイトが混在する環境での完璧な解決策を解説します。

関連記事:

  • 第2部:TRUST_DOWNSTREAM_PROXYと混在環境の設定(続く)
  • 第3部:Apache側の設定とログフォーマットの詳細(続く)

タグ: nginx, Apache, WordPress, Docker, リバースプロキシ, IPアドレス, Cloudflare