Apache アクセスログの条件分岐

| コメント(0) | トラックバック(0) |

このサイトは、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 です。

これをすることにより、ローカルアクセスのログを別ファイルにすることができます。

トラックバック(0)

トラックバックURL: https://www.letstryit.net/mt/mt-tb.cgi/10

コメントする

アーカイブ

カウンタ

Total
Today
Yesterday

IPv6 Ready

Powered by Movable Type 7.0

このブログ記事について

このページは、enjoypcが2009年3月11日 15:02に書いたブログ記事です。

ひとつ前のブログ記事は「疑似乱数生成 メルセンヌ・ツイスター」です。

次のブログ記事は「Movable Type 日本語タグの重複」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ