WEBサーバを運用しているとアレコレとログをとることになるだろう。WEBサーバとクライアントの間にロードバランサやプロキシがいたりして、ログに記録されるクライアントIPアドレスがロードバランサやプロキシのIPアドレスになってとっても不便ということがある。
ログだけでなく、クライアントのIPアドレスによってコンテンツアクセスの制御をしたいときも、クライアントのIPアドレスが一律ロードバランサやプロキシのIPアドレスになってしまっては不便である。
そんなときは X-Forwarded-For に入っているアドレスを REMOTE_ADDR に転記してくれるモジュール mod_remoteip を使えば良い。
RHEL7/CentOS7 の Apache2.4 であれば、mod_remoteip が組み込まれているので何も考えずに httpd.conf に 以下のようなことを書いておけば良い。
RemoteIPHeader X-Forwarded-For
RemoteIPInternalProxy 192.168.0.1 #ロードバランサやプロキシのIPアドレス
RemoteIPInternalProxy に記載したIPアドレスから来たリクエストのみ X-Forwarded-For のアドレスを REMOTE_ADDR に転記するようになる。このとき元のリクエストに含まれていた X-Forwarded-For は消去される。
WEBアプリケーション側から見れば、X-Forwarded-For のないリクエストに見える。よってクライアントIPアドレスで制御し放題である。
Apache のログに記録したい場合は、%h (リモートホスト名) ではなく %a (アクセス元IPアドレス) で記録するよう設定を変更しておく。