Nginx + ELB 使用時にアクセス元IPが正しく記録されるようにする


ELB(Elastic Load Balancing)使用時にはまったのでメモ。

ELBを使用した場合、アクセス元IPがELBのIPアドレスになってしまうため、アクセスログに本来のIPが記録されなかったり、allowに許可IPを設定しても正しく動作しない問題が発生します。

そこでアクセス元IPが正しく記録されるようにnginxの設定を修正します。

1. NginxにHttpRealipModuleが組み込まれているかを確認

nginx -V

を実行し、「–with-http_realip_module」が表示されていることを確認

2. nginx.confを修正

通常は「set_real_ip_from」に「10.0.0.0/8」を設定

VPCを使用している場合はELBが所属するサブネットのネットワークアドレスを指定するそうです

「real_ip_header」には「X-Forwarded-For」を指定します

http {
  …
  set_real_ip_from   10.0.0.0/8;
  real_ip_header     X-Forwarded-For;
  …
}

もしくは

server {
  …
  set_real_ip_from   10.0.0.0/8;
  real_ip_header     X-Forwarded-For;
  …
}

3. nginxを再起動してアクセスログを確認

アクセスログには正しいアクセス元IPが記録されるようになっています。

また、allowの設定も正しく動作するようになります。

参考