nginxにてELB経由の接続からアクセス元IPを取得する方法

この記事には広告を含む場合があります。

記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

ELB経由の接続はログにプライベートIPが記述される

AWSにてELB(ロードバランサー)を設定しているEC2のアクセスログを確認すると、接続元IPアドレスがELBのプライベートIPアドレスになっています。今回はnginxにてELB経由の接続でも、接続元のグローバルIPアドレスを取得する方法をご紹介します。

 

アクセスログのサンプル

下記のログファイルの抜粋は、ELBに接続されたEC2のアクセスログです。見事に接続元のIPアドレスがELBのプライベートIPアドレスになってますね。

172.31.23.87 - - [22/Sep/2018:05:06:28 +0000] "GET /index.html HTTP/1.1" 200 152 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
172.31.15.43 - - [22/Sep/2018:05:06:54 +0000] "GET /index.html HTTP/1.1" 200 152 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
172.31.23.87 - - [22/Sep/2018:05:06:58 +0000] "GET /index.html HTTP/1.1" 200 152 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
172.31.15.43 - - [22/Sep/2018:05:07:24 +0000] "GET /index.html HTTP/1.1" 200 152 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"

 

接続元IPアドレスの取得方法

nginxの設定ファイルに下記の設定を追記しましょう。
ELBが使用する[172.31.0.0 ~ 172.31.255.255]のIPアドレスに対して、接続元のIPアドレスを表示する設定を付与します。

set_real_ip_from 172.31.0.0/16;
real_ip_header  X-Forwarded-For;

 

さいごに

対処方法は簡単なのでELBに接続するEC2サーバーには必ず設定しましょう。何かの調査や確認をしようとしたときに、アクセスログの接続元IPアドレスがローカルIPで愕然としないようにして注意してくださいね。
※ELBの最初に使用したときの私は、調査するときにアクセスログの接続元IPアドレスが全てローカルIPで保存されていて絶望を覚えました( ;∀;)