2007年11月1日木曜日

ApacheでURIに応じてアクセスログを分ける方法

mod_setenvifを使ってアクセスログをURIに応じて振り分ける方法。

mod_setenvifをロードしておく。

LoadModule setenvif_module modules/mod_setenvif.so

SetEnvIfディレクティブでURIに応じて環境変数をセットする。正規表現はPerl互換。
SetEnvIf Request_URI "^/foo.php$" foo

環境変数によってログファイルのパスを振り分ける。
CustomLog logs/access.log common env=!foo
CustomLog logs/access.foo.log common env=foo

ログを年月別のファイルにする方法と組み合わせて、さらにLAN内からのアクセスはログ無しにしてみる。
#※2007/11/02 誤ってRequest_URIとしていた箇所をRemote_Addrに訂正!
#サーバ自身からのアクセスは環境変数nologをセット

SetEnvIf Remote_Addr 127.0.0.1 nolog
#LAN内からのアクセスも環境変数nologをセット(プライベートIPアドレスがクラスCの場合)
SetEnvIf Remote_Addr 192.168. nolog
#foo.phpへのアクセスは環境変数fooとnologをセット
SetEnvIf Request_URI "^/foo.php$" foo nolog
#※2007/11/05 rotatelogsのパラメータを修正
#通常のアクセスは詳細(combined)にログを採る
CustomLog "|bin/rotatelogs -l logs/access.%Y%m.log 86400" combined env=!nolog
#fooへのアクセスは簡易ログで
CustomLog "|bin/rotatelogs -l logs/access.%Y%m.foo.log 86400" common env=foo


参考:
 mod_setenvif - Apache HTTP サーバ
 Apacheのログを分類して記録する方法
 自宅サーバを使ったウエブページの公開

0 件のコメント:

ブログ アーカイブ

tags