QA@IT

特定のパターンがあるログを、Apacheのアクセスログに記録したくない

3615 PV

現在、UbuntuでApache/2.2.22を使っているのですが、特定のパターンがあるアクセスログを、保存したくないのですがapache2.confにどのようにかけばいいのか悩んでいます。

具体的に状況等を説明させていただきます。

現在アクセスログを分析しようとしているのですが、無意味なアクセスログが大量に記録されていることに気づきました。
それがこれです。

11.111.11.111   -   -   [17/Dec/2013:00:00:33 +0900]    "-" 408 -   "-" "-" 34  -   -

LogFormatは整形してあります、具体的にはこうしています。

LogFormat "%h\t%l\t%u\t%t\t\"%r\"\t%>s\t%b\t\"%{Referer}i\"\t\"%{User-Agent}i\"\t%D\t%{X-Forwarded-For}i\t%{X-Forwarded-Proto}i" elb_customlog

簡単にForamatの説明をさせていただきます。
X-Forwarde等を取っているのは、このサーバはELBを介してるからです。
また/tが多いのは、TSV形式にしているからです。

このサーバはELBを介しているのですが、どうもこのアクセスはELBからのアクセスらしいです。

そこで私はこのアクセスをログに記述しないように、SetEnvIfを使って制御しようと考えました。
ELBからのログの定義は、X-Forwarded-Protoが設定されていない物が、ELBからのログだとすることにしました。

そしてかいたEnvIfがこれです。

# Check ELB Access
SetEnvIf X-Forwarded-Proto "^$" no_proto
SetEnvIF no_proto "1" nolog

other-vhosts-access-logはこんな感じです。

CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/other_vhosts_access.log.%Y%m%d 86400 540" elb_customlog env=!nolog

しかしながら依然として、ELBからのログは記録され続けています。
わたしはどこの記述が間違っていますか?

ご回答いただけると幸いです。

回答

設定されていない時のパターンが"^$"でマッチするとして、

SetEnvIf X-Forwarded-Proto "^$" no_proto=1
SetEnvIF no_proto "1" nolog

SetEnvIf X-Forwarded-Proto "^$" nolog

になるような気がします。


追記 2013/12/22 20:09

SetEnvIf X-Forwarded-Proto ".*" nologとしてやってみた所
(略)
なので解決策としては、これの否定形を取れば解決といえば解決なんですが、

SetEnvIfをもう一つ追加し、

SetEnvIf X-Forwarded-Proto ".*" forwardedlog
SetEnvIf forwardedlog 0 nolog=1

とする、または

Customlogの方で

CustomLog "|/usr/sbin/rotatelogs /var/log/apache2/other_vhosts_access.log.%Y%m%d 86400 540" elb_customlog env=nolog

というように env=!nologではなくenv=nologに変更する。

このどちらかではどうでしょう

後者の場合は環境変数名(nolog)は変えた方がいいでしょう。

※ ちなみにSetEnvIf の値省略時、値は"1"になるそうです。

編集 履歴 (4)
  • お返事ありがとうございます。
    おかげさまで解決できました。
    おつきあいありがとうございました。
    -

<< flied_onionさん

お返事ありがとうございます。こちらに回答の返信を書かせていただきます。

<< SetEnvIf X-Forwarded-Proto "^$" nolog
<< になるような気がします

この方法でやってみたのですが、残念ながらログは記録されていました。

なので "^$"が「設定されてないこと」を意味しないのではないかと考え、

SetEnvIf X-Forwarded-Proto "-" nolog

SetEnvIf X-Forwarded-Proto - nolog

も試してみたのですが、駄目でした。

何度もお手数をかけて申し訳ないのですが、何か他に思い当たる様な設定方法がありましたら、ご回答いただけると幸いです。

ーーーーーーー追記ーーーーーーーーーーーー

お返事ありがとうございます。

SetEnvIf X-Forwarded-Proto ".*" nologとしてやってみた所、なんと

11.111.11.111   -   -   [17/Dec/2013:00:00:33 +0900]    "-" 408 -   "-" "-" 34  -   -

だけが表示されるようになりました…。

なので解決策としては、これの否定形を取れば解決といえば解決なんですが、

.*の否定形とはどう書けばいいのでしょうか?
^$は駄目でしたし、/0もやってみたのですが駄目でした。

度重ね申し訳ないのですが、何かお気づきの点があればご指摘いただけると幸いです。

編集 履歴 (2)
  • SetEnvIf X-Forwarded-Proto ".*" nolog としてみて、ELBからのログも通常のログも両方でなくなるか試してみるのはどうでしょう。
    それ以外に絶対にマッチする他のリクエストヘッダと条件で試してみるとか。まずはnologが設定されれば出なくなるのか知っておきたいですね。

    SetEnvというのもありますが、モジュールが違うので念のためSetEnvIfが良いかと。
    -
  • 編集をすることで返事とさせていただきました。 -
  • 回答に追記しました。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。