Naba Blog

プログラミングとか作曲など色々

ApacheのAccess.logに画像ファイルなどのログを残さない方法

とりあえず環境をば。

  • Ubuntu 12.04.4
  • Apache 2.2.22

どこのサイトを探しても/etc/httpd/httpd.confを編集しろとか、

いろいろややこしかったのでメモ。

こっちの環境だとhttpd.confは空なんだよクソ!

まずググって出てきたのが、

SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(JPG)|(ico)$" nolog
CustomLog /var/log/httpd/access_log combined env=!no_log

これが正規表現として間違ってるよ! という記事

あーたしかに、これじゃ拡張子として認識されるのは.gifだけだなぁと。

正しくは

SetEnvIf Request_URI “\.(gif|jpg|png|JPG|ico)$” nolog
CustomLog /var/log/httpd/access_log combined env=!no_log

なんですね、フムフム。

んで、こっちの環境に合わせたり、他にも除外したいものがあったので追加して

SetEnvIf Remote_Addr 192.168.11. nolog
SetEnvIf Request_URI "\.(gif|jpg|png|JPG|ico|js|css|woff)|(\?)$" nolog
CustomLog ${APACHE_LOG_DIR}/access.log combined env=!nolog

こうなりました。

まず、ローカルからのアクセスのログは要らないので192.168.11.*は除外します。

拡張子は、追加でJavaScript、CSSファイル、フォントのwoffを除外。

あと、WordPress使ってて~?var=x.xとかも気になったので?も除外。

${APACHE_LOG_DIR}はデフォルトで/var/log/apache2だと思うのでそのまま。

それで、迷ったのが、書く場所

まず書いたのが/etc/apache2/apache2.conf

うーん、やっぱり変わらない。分からん!

次、/etc/apache2/httpd.conf

いつからか分かりませんがhttpd.confは空ファイルになりましたね。。

とりあえずそのまま書いた。変わらん。分からない!!

次、/etc/apache2/conf.d/httpd.conf

こう解説しているサイトもあったので試す。やっぱり分からん。

どうしようかー、と迷っていたら、とあるサイトに

<VirtualHost *:80>
    SetEnvIf ~
    CostomLog ~
</VirtualHost>

と書いてあるのを発見。そういやこのエントリどこだと探したら、見つけた。

/etc/apache2/sites-available/default

開くと、アクセスログとかエラーログがなんとかって書いてあるじゃないですかー、やだー。

おもむろに

<VirtualHost *:80>
    (略)
    # アクセスログの整形
    SetEnvIf Remote_Addr 192.168.11. nolog
    SetEnvIf Request_URI "\.(gif|jpg|png|JPG|ico|js|css|woff)|(\?=)$" nolog
    CustomLog ${APACHE_LOG_DIR}/access.log combined env=!nolog
    (略)
</VirtualHost>

そして適用させるためApache2の再起動。

$ sudo service apache2 restart
$ tail -f /var/log/apache2/access.log

で表示させながらアクセス。

キタ━━━━(゚∀゚)━━━━!! ログに残らない!!

以上です、おわり。

書いてから気付いたけど、これどこのファイルにしろ、

<VirtualHost *:80> </VirtualHost>

を作ってあげればちゃんと出来たのかな。

あ、でも書き込む場所をデフォルトの設定よりも下に書かないといけないのかな。

とりあえず、出来たからいいよね。