nginxでアクセス元IPを使って、ログを残したりアクセス制限をしたいときに、手前にELBなどが入っていると、そのままではクライアントのIPアドレスではなく、ELBのアドレスが取得されてしまいます。
ELBだけであれば、以下のページの設定で対応できます。
しかし、ELB以外のサーバなども間に入ってくると、これだけでは対応できません。
複数のProxyを通る場合、X-Forwarded-For
は複数の値が入ります。
X-Forwarded-For: client1, proxy1, proxy2, ...
この場合でも一番左のアドレスを取得するためには、複数の set_real_ip_from
を記述し、また、real_ip_recursive
を有効にします。
例えば次のような感じです。
set_real_ip_from XXX.XXX.XXX.XXX/24;
set_real_ip_from YYY.YYY.0.0/16;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
これで期待するアクセス元IPアドレスが取得できるようになります。