Azure Application Gateway利用した時のApacheアクセスログについて
Application Gateway経由とした場合、Webサーバ側のApacheのアクセスログを確認するとApplication GatewayのローカルIPが表示されていました。
これは、Application Gatewayからバックエンド側への通信はローカルIPで実施されるためです。
この点はAzure Load Balancer を使った場合等との違いになります。
接続元の実IPはX-Forwarded-Forに含まれているとの事で、実IPを確認する為にはX-Forwarded-Forから戻す必要があります。
今回はApacheのaccess.logにX-Forwarded-For(実IP)が表示されるようにしてみました。access.logのsyslog化も併せて実施してみました。
Application Gatewayを利用した場合のApacheアクセスログを確認する
Application Gateway利用した場合のバックエンド側にあるApacheのアクセスログを確認してみました。
Azure Load Balancer利用時は実IPが表示されますが、今回はアクセス元IPがApplication GatewayのIPになっている事が分かります。
192.168.X.4 – – [16/May/2019:09:54:00 +0900] “GET / HTTP/1.1" 200 17540 “-" “-“ |
実IP確認の為には、X-Forwarded-Forの値をアクセスログに表示させる必要がある事が分かります。
X-Forwarded-Forを表示するようにApacheを設定変更する
Apacheの設定変更は、httpd.confで行います。今回は以下の2点を実施しています。
-
- httpd.confのLog Formatの変更(X-Forwarded-Forを表示させる)
- CustomLog、ErrorLogのsyslog化(サンプルはLocal6を指定(環境に合わせて設定))
[root@test-vm ~]#cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.`date “+%Y%m%d"` #変更前 ErrorLog “logs/error_log" #変更後 LogFormat “%{X-Forwarded-For}i \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined ※access log、error log両方local6に出力する設定です。 |
rsyslogファイル作成
rsyslog側の設定を行います。
ApacheのLog出力先にlocal6を指定したので、rsyslog側でLocal6のファイル出力先を指定します。そのままだとmessagesにも出てしまうので除外指定も行います。
#新規にファイルを作成し、下記を追加する。 [root@test-vm ~]#vi /etc/rsyslog.d/httpd.conf local6.* /var/log/httpd/access.log #このままだと、messagesにも表示されてしまうので、rsyslog.confも編集する。 [root@test-vm ~]#cp -p /etc/rsyslog.conf /etc/rsyslog.conf.`date “+%Y%m%d"` [root@test-vm ~]#vi /etc/rsyslog.conf #変更前 *.info;mail.none;authpriv.none;cron.none;local6.none var/log/messages |
Application Gatewayの正常性プローブアクセスをログから除外する
Application Gatewayはバックエンドの正常性を確認する為、バックエンド側のWEBサーバへ正常性プローブのアクセスを行います。
そのままだとこのアクセスがApacheのアクセスログに表示されてしまいLogが見にくくなります。
今回は正常性プローブのアクセスを、rsyslogでignoreを使って除外設定を行います。
#新規にファイルを作成し、下記を追加する。 [root@test-vm ~]#vi /etc/rsyslog.d/httpd-logstop.conf msg, contains, “GET / HTTP/1.1" stop #※除外の文字列は今回のLogFormatに合わせてます。 |
logrotate.dの設定を行う
今回はrsyslog化の設定と併せて、Apacheのaccess.logのログローテの設定を行ってみました。設定後、rsyslogおよびhttpdの再起動を行います。なお設定は環境に合わせて適時変更して下さい。
[root@test-vm ~]#cp -p /etc/logrotate.d/httpd /etc/logrotate.d/httpd.`date"+%Y%m%d"` #設定ファイルの中身を下記記載に置き換えます。 /var/log/httpd/access.log { #今回は32日保管で、ローテ後圧縮にしています。 [root@test-vm ~]#systemctl restart httpd [root@test-vm ~]#systemctl restart rsyslog |
出力されたApacheのアクセスログを確認する
設定が完了後のログを確認してみました。
/var/log/httpd/access.logに、アクセス元のIPが表示されている事が確認できました。
May 27 15:49:39 webサーバ名 httpd_access: XXX.XXX.XXX.XXX:XXX “GET /favicon.ico HTTP/1.1" 200 – “http://www.XXX.com/" “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" |
今回はCentOS7で実施しています。Apacheのバージョン等により設定が異なると思いますので、適時環境に合わせて修正して頂ければと。
Application Gatewayでのログ確認方法についてはこちら。
Application Gatewayの作成手順についてはこちら。
https://www.tama-negi.com/2019/05/26/azure-application-gw-01/