ノウハウ
[エンジニア向け]

[CloudGarage]ロードバランサー利用時の接続元IPをアクセスログに表示する

ノウハウ
テクニカルサポート

CloudGarageには標準で1つのロードバランサーを提供しています。

このロードバランサーを利用した場合、アクセスログに接続元のIPアドレスが表示されないんだけど、、、とのお問い合わせを適度にいただくため、アクセスログに接続IPアドレスを表示する手段の一例を紹介いたします。

なお、HTTP通信はこれから紹介する手段で可能になりますが、2017年10月現在、HTTPS通信は仕様上の問題で不可となります。
(時期は未定ですがCloudGarage開発陣ではHTTPSでもアクセス元IPが取得可能な仕組みを検討中です)

また、紹介記事はApache用となります。Nginxの場合は設定方法が異なります。

事前準備

本記事による説明用にCloudGarageのアプリケーションテンプレートからインスタンスを起動します。
今回はLAMPが入ったUbuntuのテンプレートを選択しました。

初期状態でのアクセスログを確認してみる

ブラウザから http://<<IPアドレス>> でアクセスしApache2標準のindexが表示されました。

 

アクセスログ(標準出力ファイル /var/log/apache2/access.log )にも接続元IPが表示されています。

***.174.***.44 - - [03/Oct/2017:19:50:35 +0900] "GET / HTTP/1.1" 200 3525 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"

ロードバランサーを設定した場合のアクセスログを確認してみる

CloudGarageのコントロールパネルでロードバランサーを作成し、作成したインスタンスに振り分ける設定をしました。
ここでは80番と443番ポート(http/https)を振り分ける設定をしてしまいましたが、今回httpsの設定は行っていませんので、https://によるアクセスは不可となります。

ロードバランサーを設定した状態でブラウザから http://<<ロードバランサーに割り当てられたIPアドレス>>にアクセスすると今度はプライベートIP(192.***.***.***)が接続元として表示するようになってしまいました。

192.***.***.*** - - [03/Oct/2017:19:55:46 +0900] "GET / HTTP/1.1" 200 3469 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"

 

Apache2で接続元IPを表示する準備

Apache2.4で導入されたremoteipモジュールを利用します。
アプリケーションテンプレートのバージョンは2.4.18 (Ubuntu)なのでそのままロードすれば利用可能です。
ロードするとウェブサーバーの再起動で有効になる旨が表示されますが、この後の設定でも再起動が必要なため、ここでは再起動不要です。

# a2enmod remoteip
Enabling module remoteip.
To activate the new configuration, you need to run:
service apache2 restart

Apache2の設定ファイルに X-Forwarded-For ヘッダーをロギングするよう設定します。
今回はデフォルトサイト設定のファイル( /etc/apache2/sites-available/000-default.conf )を編集して説明としますが、参考とされる場合は運用に合わせたconfファイルで実装してください。

20~22行目は追加行です。25行目はアクセスログの出力が重複しますので、コメントアウトとしています。

20 RemoteIPHeader X-Forwarded-For
21 LogFormat "%a %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined-remoteip
22 CustomLog ${APACHE_LOG_DIR}/access.log combined-remoteip
23
24 ErrorLog ${APACHE_LOG_DIR}/error.log
25 # CustomLog ${APACHE_LOG_DIR}/access.log combined

設定後はApache2の再起動を行って設定を反映させます。

# service apache2 restart

再びロードバランサーを設定した場合のアクセスログを確認してみると…o(;-_-;)o

***.174.***.44 - - [03/Oct/2017:20:16:25 +0900] "GET / HTTP/1.1" 200 3186 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36"

接続元IPがプライベートIPから接続した環境のIPアドレス表示になりました。

 


上記設定を分散先のインスタンス全てにやるのは手間なので、1つのインスタンスで設定したらインスタンスイメージを取得し、取得したイメージからのインスタンス複製を行うと分散先サーバーを楽に構築いただけます。

この記事を書いた人

テクニカルサポート

テクニカルサポートを得意とするCloudGarage、エクスクラウドのサポートスタッフ。

この記事のタグ

オススメの記事

ページトップへ