デフォルトの状態だとアクセスログの情報が少ないので、設定変更します。
モジュールが有効になっていることを確認。
# cd /usr/local/httpd-2.4.9/ # vi conf/httpd.conf LoadModule log_config_module modules/mod_log_config.so LoadModule logio_module modules/mod_logio.so
apache2.4.9のログフォーマットはhttpd.confを見ると以下のようになっています。combinedioが最もログ情報が多いですが、mod_logioモジュールが有効である必要があります。
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common <IfModule logio_module> # You need to enable mod_logio.c to use %I and %O LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio </IfModule>
CustomLogディレクティブに設定されているログフォーマットが適用されます。デフォルトはcommonなのでcombinedioに変更します。
#CustomLog "logs/access_log" common CustomLog "logs/access_log" combinedio
ついでにログローテーションの設定もします。パッケージインストールしたApache2.2.15の時はlogrotateでローテンションしてましたが、前回ソースインストールした2.4.7の時はなぜかlogrotateでApacheのログローテーションが機能せず、結局原因がわかっていません…
しかしApacheにはrotatelogsというコマンドでログのローテーションができるらしいので、今回はこちらを使います。ソースインストールしてパスを通していないのでフルパスで記述します。(1日でローション86400秒)
#CustomLog "logs/access_log" common #CustomLog "logs/access_log" combinedio CustomLog "|/usr/local/httpd-2.4.9/bin/rotatelogs logs/access_log.%Y%m%d 86400" combinedio
エラーログも同じようにローテーションの設定をしておきます。
#ErrorLog "logs/error_log" ErrorLog "|/usr/local/httpd-2.4.9/bin/rotatelogs logs/error_log.%Y%m%d 86400"
・その他
リバースプロキシを使っている場合、バックエンドのサーバのアクセスログとエラーログのリクエスト元は本来のアドレスではなく、プロキシ・ロードバランサーのアドレスになっています。プロキシ・ロードバランサー経由のリクエストはクライアントアドレスの情報を記述したX-Forwarded-Forヘッダを付けるので、バックエンドサーバでX-Forwarded-Forヘッダを参照するよう設定をすれば本来のリクエスト元アドレスをログに記述できます。
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
最新記事
参考