メタディスクリプション
Apache単独運用と、ApacheからTomcatへのプロキシ構成における「訪問者IP検出方法」を解説。REMOTE_ADDR だけでは不十分なケースや、mod_remoteip・RemoteIpValveの導入ポイントを紹介します。
はじめに
アクセスログやセキュリティ対策のためには、訪問者の 正しいIPアドレス を取得することが重要です。
しかし、リバースプロキシやアプリケーションサーバ(Tomcat)を挟む構成では、そのままではプロキシサーバのIPしか取得できないケースがあります。
この記事では、Apache単独の場合とApache→Tomcatの場合に分けて、正しいIP検出方法を解説します。
1. Apache単独運用の場合
- バーチャルホストで直接リクエストを受けている場合は、
REMOTE_ADDRがそのまま訪問者のIPになります。 - このケースでは特別な設定は不要で、追加のヘッダを信頼する必要もありません。
2. Apache → Tomcat プロキシ構成の場合
- ApacheがフロントでTomcatに中継する構成では、Tomcat側から見ると
REMOTE_ADDRはApacheのIPになります。 - このままでは正しい訪問者のIPが記録されないため、Apacheで mod_remoteip を有効にし、
X-Forwarded-Forを信頼する設定を入れるのが一般的です。
Apacheの例
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 127.0.0.1
LogFormat "%a %l %u %t \"%r\" %>s %b" vhost_with_realip
CustomLog logs/access.log vhost_with_realip
RemoteIPInternalProxyに「信頼するプロキシ」を指定することで、不正なヘッダ偽装を防ぎます。%aを使うと置換後のクライアントIPがログに記録されます。
3. Tomcat単独運用の場合
将来的にTomcatを直接公開する場合は、server.xml に RemoteIpValve を追加することで同様の効果が得られます。
<Valve className="org.apache.catalina.valves.RemoteIpValve" remoteIpHeader="x-forwarded-for" protocolHeader="x-forwarded-proto" internalProxies="127\.0\.0\.1" />
internalProxiesに信頼できるプロキシを指定するのが安全です。- Tomcatのログでは
%aを使うと適用後のクライアントIPが表示されます。
4. 注意点
- 直受けのApacheには不要:
REMOTE_ADDRだけで十分。余計なヘッダを信頼すると偽装リスクが高まります。 - プロキシ経由の場合のみ設定:mod_remoteipやRemoteIpValveを使う。
- 信頼できるプロキシを限定:安全に運用するために必須です。
まとめ
- Apache単独 →
REMOTE_ADDRをそのまま利用。 - Apache→Tomcat → mod_remoteip で
X-Forwarded-Forを解釈。 - Tomcat単独 → RemoteIpValve を導入。
- 共通の注意点 → 信頼プロキシを限定すること。
このように環境ごとに適切なヘッダ処理を導入することで、正しい訪問者IPをログに記録し、セキュリティ対策やアクセス解析に役立てることができます。

