このサイトは、Movable Typeというブログで作られています。
ブログやWikiは、通常ウェブブラウザを通して編集します。
このとき、サーバのアクセスログに大量のローカルマシンからのアクセスが記録されることになります。これにより、外部からのアクセスの区別が困難になり、さらにアクセスログのサイズも大きくなります。
これを防ぐために、外部と内部のアクセスログを分離します。
これからその方法を紹介します。Apacheに関する詳しいことは、後日します。最近この変更を追加したので、忘れないうちに書いておくことにします。
使用するのは、Apache 2.2.3、Vine Linux 4.2です。
これ以外の組み合わせについては、動作保証ができません。
設定法
Apacheの設定ファイルを開きます。設定ファイルのパスは、/etc/apache2/conf/httpd.conf です。
設定する前に、必要なモジュールが読み込まれているか確認します。
以下の記載があればOKです。私の環境では、標準で有効でした。
LoadModule setenvif_module modules/mod_setenvif.so
条件を追加します。条件は、SetEnvIf を使って書きます。
設定ファイルのどこに書いても良いですが、わかりやすい位置に書いてください。LogFormat の下に書くと良いと思います。
SetEnvIf Remote_Addr 192.168.0.* local-addr
これは、IPアドレスが 192.168.0.* の物を条件し、使う時は、local-addr とすると言う意味です。(*は任意)
これの詳細は後でします。
条件を適応した、ログを追加します。すでにある物を変更します。
変更前 CustomLog logs/access_log combined
変更後 CustomLog logs/access_log combined env=!local-addr
access_log のログから local-addr にあう条件の場合は、記録しないと言うようになります。
後は、Apache を再起動するだけです。
# /etc/init.d/apache2 restart
もしくは
# service apache2 restart
エラーが発生した時は、その行を確認してください。私は、env=!local-addr を env!=local-addr と書き間違えていました。
詳細説明
SetEnvIf
今回は、IPアドレスで処理を行いましたが、他にもURLによる条件などができます。
種類
Remote_Addr クライアントのIPアドレス
Remote_Host クライアントのホスト名
Server_Addr サーバのIPアドレス
Request_Method 使用されたメソッド名(GET, POSTなど)
Request_Protocol プロトコルの名前とバージョン(HTTP/1.1など)
Request_URI URLの内ホストを除いた部分例
SetEnvIf Remote_Host \.jp$ japan-host
日本のホストを条件とするSetEnvIf Server_Addr 192.168.0.2 main
192.168.0.2で処理をしたSetEnvIf Request_Method POST bbs-write
POSTの時SetEnvIf Request_Protocl HTTP/1.0 old
HTTP/1.0による要求の場合SetEnvIf Request_URI "\.pdf$" pdf-files
要求されたファイルが、PDFの時
例に書いている物は、動作検証をしていません。
条件を重ねたい時は、同じ名前をつけるとできるようになります。
SetEnvIf Remote_Addr 192.168.0.* local-addr
SetEnvIf Remote_Addr 127.0.0.1 local-addr
条件の部分は、Perl互換の正規表現です。
CustomLog
CustomLog の env は、以下のようにして使います。
CustomLog ログファイル名 形式 env=条件名
条件名に SetEnvIf で指定した名前を使います。条件名の先頭に ! をつけると否定になり、それを除くと言う意味になります。
CustomLog ログファイル名 形式 env=!local-addr
新たに違うファイルにログをとりたい時は、CustomLog を追加します。
CustomLog logs/localaccess_log combined env=local-addr
形式は LogFormat のものです。通常は combined です。
これをすることにより、ローカルアクセスのログを別ファイルにすることができます。
コメントする