今ならXeonも搭載可能なPCサーバー「PowerEdge SC440」が2万円台から買える!

マウスコンピューター」ならWindows抜きでもPCが買える。Linuxサーバーとしての利用に最適!

トップページ

  • tarの使い方
  • rpmの使い方
  • psコマンドでプロセスを確認
  • /etc/crontabを編集してアプリを自動実行
  • chkconfigコマンドでプロセスを自動起動

アクセスログをカスタマイズする

 ウェブサーバーへのアクセスはすべて記録されている。「/var/loog/httpd」ディレクトリの中にある「access_log」や「error_log」などのファイルがアクセスログだ。このファイルを見れば、誰がいつどのファイルにアクセスしたのかが分かる。
 ログは次のような形式になっている。これはあるウェブサイトのトップページで3つの画像を使ったときのログの例だ。1つのページにアクセスしたものだが、3つの画像がリンクされているので、ログの上では4行になる。

192.168.0.23 - - [06/Feb/2005:08:20:23 +0900] "GET /index.html HTTP/1.1"
 200 5278 "http://www.hoge.com/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
192.168.0.23 - - [06/Feb/2005:08:20:23 +0900] "GET /image/logo.jpg HTTP/1.1"
 200 47920 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
192.168.0.23 - - [06/Feb/2005:08:20:23 +0900] "GET /image/back.jpg HTTP/1.1"
 200 41381 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
192.168.0.23 - - [06/Feb/2005:08:20:23 +0900] "GET /image/photo.jpg HTTP/1.1"
 200 45235 - "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

 1番上の行の場合、次のような情報が読み取れる。生のログはわかりにくいけれども、ログ解析ソフトを使うと、自分のサイトへのアクセスの傾向をつかむことができる。特にリンクをたどってきたときのリンク元の情報からは、どういうサイトから自分のサイトへ誘導されてきたかが分かる。その傾向をつかめば、自分のサイトのアクセスをのばすのに役立てられるはずだ。

アクセス元のIPアドレス 192.168.0.23
アクセスした時間 2005年2月6日 8時20分23秒
アクセスしたファイル index.html
アクセスした結果 200(正常)
アクセスしたファイルのサイズ 5278バイト
リンクをたどってきたときのリンク元 http://www.hoge.com/
使用しているブラウザの種類 IE6.0、WindowsXP

 ちなみにアクセスした結果(ステータスコード)は次のような意味を持っている。ユーザーがよく目にするのはエラーをあらわす400番台と500番台のメッセージだろう。

200 OK 正常
301 Moved Permanently 指定したURLのデータが別の場所に移動した
304 Not Modified 指定したURLのデータは更新されていない
400 Bad Request クライアントから不正なコマンドを受け取った
401 Unauthorized アクセス制限されているページで認証されなかった
403 Forbidden アクセスが禁止されているURLを要求した
404 Not Found 指定したURLが見つからない
405 Method Not Allowed クライアントからのリクエストを使用できない
408 Request Timeout サーバーが時間内にリクエストに応答できなかった
500 Internal Server Error サーバーエラーでリクエストを実行できなかった

自分がアクセスしたログを残さない

 アクセスログにはゴミがまじることがある。まずは自分がアクセスしたログだ。うまくページが表示されているかテストをするけれども、アクセスログにはその記録まで残されてしまう。自分のアクセスを記録しても分析には役立たないので、LANの中からアクセスしたときは記録をとらないように設定してみよう。
 viでhttpdの設定ファイル「/etc/httpd/conf/httpd.conf」を開く。610行目あたりに「CustomLog /var/log/httpd/access_log combined」という記述があるはずだ。その近くに次の一行を追加しよう。また、「Customlog」で始まる行にも記述を追加する。これで自分のサイトからのアクセスは記録されなくなる。

#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here.  Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
# CustomLog /var/log/httpd/access_log common
CustomLog /var/log/httpd/access_log combined env=!no_log ←太文字を追加
SetEnvIf Remote_addr 192.168.0. no_log ←この一行を追加

 上の例の場合、LANの中のプライベートIPアドレスが「192.168.0.×」であるときの設定だ。「192.168.0.」から始まるアドレスはログから除外するように設定している。別のプライベートIPアドレスで運用しているときはそのアドレスに書き換えよう。

ワームのログを記録しない

 ワームの中には無差別にIPアドレスを指定して攻撃をかけてくるものがある。ウェブサーバーを運用していると、一日に何件もワームからのアクセスを受け、意味のない記録がログの中に残される。中には一度に32KBという巨大なサイズの要求を送ってくるワームがあって、そのままログに記録しているとサイズが途方もない大きさになってしまう。
 ワームのログを記録しない方法には2つある。ひとつは特定の文字列を含む要求は無視するように設定するものだ。LANの中からの設定をログからはじくように設定したのと同じ要領でワームのログも残さないようにできる。ワームが送りつけてくる要求はワームごとに決まっているので、その文字列を指定しておけばいい。次が設定の例だ。太文字の部分を追加する。

#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here.  Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
# CustomLog /var/log/httpd/access_log common
SetEnvIf Remote_addr 192.168.0. no_log
SetEnvIf Request_URI "^/_mem_bin/" nolog
SetEnvIf Request_URI "^/_vti_bin/" nolog
SetEnvIf Request_URI "^/c/" nolog
SetEnvIf Request_URI "^/d/" nolog
SetEnvIf Request_URI "^/msadc/" nolog
SetEnvIf Request_URI "^/MSADC/" nolog
SetEnvIf Request_URI "^/scripts/" nolog
SetEnvIf Request_URI "^/default.ida" nolog
CustomLog /var/log/httpd/access_log combined env=!no_log

 だが、この方法では新種のワームが出てきたら、httpd.confを編集し直さなければならない。そこで第二の方法である。ワームはIPアドレスを指定して要求を送りつけてくることを利用して、ドメイン名ではなく、IPアドレスでアクセスしてきたログを残さないように設定する。これには別のページで紹介しているバーチャルホストの機能を使う。
 バーチャルホストの設定は1050行目くらいにある。太字の部分を追加しよう。

#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
#
#<VirtualHost ip.address.of.host.some_domain.com>
#    ServerAdmin webmaster@host.some_domain.com
#    DocumentRoot /www/docs/host.some_domain.com
#    ServerName host.some_domain.com
#    ErrorLog logs/host.some_domain.com-error_log
#    CustomLog logs/host.some_domain.com-access_log common
#</VirtualHost>

#<VirtualHost _default_:*>
#</VirtualHost>

<VirtualHost *>
        ServerName worm
        DocumentRoot /home/httpd/worm ←架空のディレクトリ
        CustomLog logs/worm_access_log common ←ワーム用のログ
        Errorlog logs/worm_error_log ←ワーム用のログ
</VirtualHost>

<VirtualHost *>
        ServerName www.mydomain.com ←自分の本来のアドレスを指定
        DocumentRoot /home/httpd/html ←データのディレクトリ
</VirtualHost>

 ワームに関する記述はいちばん最初に記述する。IPアドレスでアクセスしてきたものは、すべてのこの記述に引っかかり別のファイルにログをまとめておく。そして、次のバーチャルホストで本来のアドレスを指定する。

画像ファイルへのアクセスを記録しない

 ウェブページではロゴや背景などの画像もたくさん使う。このアクセスもログに記録されるが、あまり解析に役立つ情報ではないのにサイズだけは大きくなる。画像中心のサイトを作っているのでなければ、画像ファイルへのアクセスを記録しないように設定できる。特定の拡張子を持つファイルへのアクセスは無視するように設定するのだ。上のLAN内からのアクセスを記録しない設定と同じ場所に、次のように記述を追加する。

#
# The location and format of the access logfile (Common Logfile Format).
# If you do not define any access logfiles within a <VirtualHost>
# container, they will be logged here.  Contrariwise, if you *do*
# define per-<VirtualHost> access logfiles, transactions will be
# logged therein and *not* in this file.
#
# CustomLog /var/log/httpd/access_log common
SetEnvIf Request_URI "\.(gif)|(jpeg)|(jpg)|(png)$" no_log ←この一行を追加
SetEnvIf Remote_addr 192.168.0. no_log
CustomLog /var/log/httpd/access_log combined env=!no_log

 追加した設定は拡張子として「gif」「jpeg」「jpg」「png」を持つファイルへのアクセスは記録しないというもの。他にも無視したいファイルがあれば、同じ要領で追加していくといい。

簡単な形式でログを記録する

 標準の設定では上のように「IPアドレス」「時間」「ファイル名」「結果」「サイズ」「リンク元」「ブラウザの種別」の情報が記録されたが、そこまで詳細な情報は必要ないというときは「リンク元」「ブラウザの種別」を省いた簡単な形式でログをとれる。ブラウザの種別の情報がけっこう分量が大きいので、この設定変更でログのサイズは半分近くまで減るはずだ。特にアクセスが多いサーバーや非力なサーバーでは有効だろう。
 設定の変更は1カ所。「CustomLog」の行を次のように変更する。

Custom /var/log/httpd/access_log combined
 ↓
Custom /var/log/httpd/access_log common

IPアドレスのかわりにホスト名を記録する

 IPアドレスを見るだけではどこからアクセスしてきたのかわかりにくい。IPアドレスのかわりにホスト名をログに残すように設定しよう。この設定変更を行うとアクセスがあったたびに、DNSサーバーに対してIPアドレスの逆引きを行ってホスト名を取得する。アクセスが殺到する人気ウェブサイトでは負荷がかなりかかるはずなので、設定変更は慎重に行うべきだと思う。
 また、ログ解析ソフトによっては解析のときに逆引きをおこえるものがあり、その場合はIPアドレスのままログをとっておいてもかまわない。生のログを直に見て分析したいという人は別だが。
 設定を変更するのはCustomLogから20行くらい上にある「HostnameLookups」という行だ。この設定をOffからOnに変更する。

HostnameLookups off
  ↓
HostnameLookups on

Apacheのログにまつわるリンク


 
掲示板 管理者のサイト トップページへ

お問い合わせや間違いのご指摘はyasu@center-left.comまでメールください。