目次

LB・Proxy経由アクセスのClientIP取得

LBやProxy経由のアクセスのログをそのまま取得すると、アクセス元IPアドレスが
すべてLBやProxyのIPアドレスになる。
こういった場合は、X-Forwarded-Forから本当のアクセス元(クライアント)の
IPアドレスを取得する。

X-Forwarded-Forのフォーマット

最左がClientIP、カンマ区切りで経由してきたLBやProxyのIPアドレスとなる。

e.g. X-Forwarded-For: client1, proxy1, proxy2

xfor:192.168.26.48, 192.168.24.199

LB・Proxyの設定

一般的な設定であれば、X-Forwarded-ForにClientIPがセットされる。

e.g. HAProxyのオプション

option forwardfor       except 127.0.0.0/8

Nginxの設定

192.168.24.xのネットワークでLB・Proxyが設置されていれば、以下のようになる。

server {
    ~省略~
    ## LB X-Forwarded-For
    ## LB経由nginxのアクセスログにクライアントIPを記録する
    set_real_ip_from   192.168.24.0/24;  # LB IpAddress
    real_ip_header     X-Forwarded-For;
    ~省略~

ただしLBやProxyが多段になっている場合、上記設定では正しく取得できない。
その場合は、real_ip_recursiveオプションを設定する。

server {
    ~省略~
    ## LB X-Forwarded-For
    ## LB経由nginxのアクセスログにクライアントIPを記録する
    set_real_ip_from   192.168.24.0/24;  # LB IpAddress
    real_ip_header     X-Forwarded-For;
    real_ip_recursive on;
    ~省略~