Contents
- UNIX
- Windows
- サーバ
- プログラミング言語
- データベース
- プロトコル
- サービス
- オープンソース
- 規格・技術
- アプリケーション
- PC
- DEVICE
- その他(未分類)
お問合せ: メールフォーム
Apache(WEBサーバー)において、通常ではロードバランサ経由でアクセスしてきた端末(PC、スマホなど)のIPアドレスを知ることができません。
アクセスログに残るのは、Apacheにアクセスしてきた直前のIPアドレスであるロードバランサのIPアドレスが記録されるためです。
①端末(PC、スマホなど) -> ②ロードバランサ -> ③Apache(WEBサーバー) ↑このIPアドレスが記録される
①のIPアドレスも記録するには、以下のように httpd.conf の LogFormat に「%{X-Forwarded-For}i」という設定を加えます。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent LogFormat "%h %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" x_forwarded_for
LogFormat の設定に次の行を追加します。
LogFormat "%h %{X-Forwarded-For}i %l %u %t \"%r\" %>s %b" x_forwarded_for
識別子を「x_forwarded_for」としています。
*1:httpd.conf は confディレクトリ配下にあるとは限りません。環境により異なります。
次に httpd-vhosts.conf などのバーチャルホストの CustomLog 設定を以下のように「x_forwarded_for」として変更します。
<VirtualHost *:80> DocumentRoot /path/to/public_html ServerName example.com ErrorLog logs/example-error_log #CustomLog logs/example-access_log common(*3) CustomLog logs/example-access_log x_forwarded_for </VirtualHost>
元からあった CustomLog … の行をコメントアウトして、
CustomLog … x_forwarded_for の行を追加します。
*2:httpd-vhosts.conf は conf.dディレクトリ配下にあるとは限りません。
また、httpd-vhosts.conf というファイル名でない場合があります。
環境によってはバーチャルホストの設定が httpd.conf に書かれている場合があります。
*3:common 以外(例えば combined)となっている場合があります。
また、「”%h %l %u %t \”%r\” %>s %b”」のように LogFormat が直接書かれている場合があります。
その場合は「%{X-Forwarded-For}i」を好きな位置に追加します。
最後に Aapache の設定をリロードします。
% sudo /etc/init.d/httpd configtest(念のため config に文法エラーがないかチェックする) % sudo /etc/init.d/httpd reload
問題なければ、端末(PC、スマホなど)のIPアドレスがアクセスログに出力されるようになっていると思います。
SSL(https)のホストの場合は、この方法でIPアドレスが取得できるかはロードバランサの設定に依存するようです。
ですので、暗号化されている場合はこの手順が有効でない場合があります。