アプリケーションの前にELB(ALB CLB)がいる場合、何も設定しないと、接続元のIPアドレスはELBのIPアドレスになってしまい、実際誰がアクセスしてきたか、クライアントのアドレスがわかりません。
そのために、X-Forwarded-For ヘッダーを記述する必要がある。
ELB アクセスログにクライアント IP アドレスをキャプチャする方法を教えてください。
今更ながら、試して見た。
- 環境
- Amazon Linux2
- Apache
- ALB
- クライアント iphone→MACへデザリング
まずは、S3に転送している通常にログを確認してみる。
109.111.159.*:43514 10.0.2.218:80
/etc/httpd/conf/httpd.conf
を開き、LogFormat セクションで、次のように %{X-Forwarded-For}i を追加します。
httpd.conf
...
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
...
リロードします。
systemctl reload httpd
クライアントからアクセス。
念のため、デザリングしているMACとiPhone両方からアクセスしてみる。
今回はデザリングしているので、ソースアドレスはMACとiPhone同じになるはずだ。
ALBはS3へ5分ごとに発行されるので待って確認してみる。
MAC
126.182.77.*:20817 10.0.2.218:80
iPhone
126.182.77.*:20817 10.0.2.218:80