[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をフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!