[AWS] ELB経由のリクエストで、接続元IPをApacheのログに出力する
こんにちは、@yoheiMuneです。
今日は、Elastic Load Balancing(ELB)を使った負荷分散をしている際に、Apacheなどのアプリケーション側で接続元IPアドレスを取得する方法をブログに書きたいと思います。
例えば、httpd.confのログ設定を以下のように変更します。
HTTP ヘッダーおよび Classic Load Balancer - Elastic Load Balancing(公式ドキュメント)
最後になりますが本ブログでは、インフラ、フロントエンド、PHP、サーバー、Swift、Node.js、Python、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
今日は、Elastic Load Balancing(ELB)を使った負荷分散をしている際に、Apacheなどのアプリケーション側で接続元IPアドレスを取得する方法をブログに書きたいと思います。
何が問題か
アプリケーションの前にELBがいる場合、何も設定しないと、接続元のIPアドレスはELBのIPアドレスになってしまいます。# Accessログ 172.31.9.100 - - [25/May/2018:23:17:23 +0000] "GET /api/items HTTP/1.1" 200 172.31.9.100 - - [25/May/2018:23:17:23 +0000] "GET /api/items HTTP/1.1" 200 172.31.16.48 - - [25/May/2018:23:17:23 +0000] "GET /api/items HTTP/1.1" 200 172.31.16.48 - - [25/May/2018:23:17:23 +0000] "GET /api/items HTTP/1.1" 200
172.31.9.100と172.31.16.48がELBのIPアドレスになっていて、実際の接続元がわかりません。ELB経由の場合に接続元IPを取得するには
ELB経由の場合には、X-Forwarded-Forヘッダに接続元IPアドレスが設定されています。それをログに出力するように設定します。例えば、httpd.confのログ設定を以下のように変更します。
# 変更前
LogFormat %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
# 変更後(「X-Forwarded-For」を追加)
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
これで出力されるようになります(xxx.xxx.xxx.xxxのところです)。# Accessログ(変更後) xxx.xxx.xxx.xxx 172.31.9.100 - - [25/May/2018:23:17:23 +0000] "GET /api/items HTTP/1.1" 200 xxx.xxx.xxx.xxx 172.31.9.100 - - [25/May/2018:23:17:23 +0000] "GET /api/items HTTP/1.1" 200 xxx.xxx.xxx.xxx 172.31.16.48 - - [25/May/2018:23:17:23 +0000] "GET /api/items HTTP/1.1" 200 xxx.xxx.xxx.xxx 172.31.16.48 - - [25/May/2018:23:17:23 +0000] "GET /api/items HTTP/1.1" 200
参考資料
X-Forwarded-For以外にX-Forwarded-ProtoとX-Forwarded-Portが設定されています。具体的には以下の資料をご参照ください。HTTP ヘッダーおよび Classic Load Balancer - Elastic Load Balancing(公式ドキュメント)
最後に
AWSのこのようなTips、どんどんと吸収したいところですね。今後もAWSについても色々とブログを書きたいと思います。最後になりますが本ブログでは、インフラ、フロントエンド、PHP、サーバー、Swift、Node.js、Python、Java、Linux、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!

