はじめに:
検索エンジン(WebbotやCrawlerやSpider等)の活用は、サイトのアクセス数を増やすためには極めて重要です。
しかし、検索エンジンからのアクセスはプログラムによるものが多く、サーバログに検索エンジンからのアクセスとユーザアクセスと混ざってしまい、解析しにくい場合もあります。検索エンジンのプログラムからのアクセスと、ユーザからのアクセスを完全に分けることができれば、ユーザに対してサイトパフォーマンスの向上ができ、ユーザアクセスの追跡も簡単になるのではないでしょうか。今月のiRuleはユーザとWebbotのアクセスを分けるものです。下記のURLでもご確認いただけます:
http://devcentral.f5.com/wiki/default.aspx/iRules/ControllingBots.html

タイトル:
Webbotからのアクセスを専用サーバへ制御するiRule

メリット:

・実際のユーザのアクセスをパフォーマンスの高いサーバへ誘導することによって、ユーザにとって快適なアクセスを実現する
・リソースを使ってしまうWebbotからのアクセスを、専用サーバに集中させる
・ユーザからのアクセス追跡を簡単にする

機能説明:

SwitchコマンドでUser-Agentに含まれているテキストを、Webbotが利用するUser-Agent文字列に比較し、Webbotとして認識できるものを専用サーバ(プール)へ転送する。
通常(Webbotでない)ユーザがデフォルトプールへ転送される。Switchコマンドの代わりにmatchclassコマンドでData GroupからUser-Agentの文字列を探すもうひとつの書き方もあります。

設定概要:

Switchコマンドを利用する場合:
iRuleをVirtual Serverに関連付けるだけ。
また、追加するWebbotがあったらそのWebbotが利用するUser-Agent文字列の一部をSwitchコマンドの中に追加する。matchclassコマンドを利用する場合:
Webbotが利用するUser-Agent文字列の一部をData Groupとして登録する。
次に、iRuleをVirtual Serverに関連つける。

注釈:
追加するWebbotのUser-Agent文字列をサーバログで調べられるし、インタネット上にWebbot User-Agentのサイトもあります。
(例:http://www.user-agents.org/index.shtml

【iRule定義】

 

--------------------------------------

Switchコマンドを利用するiRule:

when HTTP_REQUEST {
   switch -glob [string tolower [HTTP::header User-Agent]] {
      "*scooter*" -
      "*slurp*" -
      "*msnbot*" -
      "*fast-*" -
      "*teoma*" -
      "*googlebot*" {
        # Send bots to the bot pool
         pool slow_webbot_pool
      }
      default {
         # Send all other requests to a default pool
         pool default_pool
      }
   }
}

--------------------------------------

Matchclassを利用するiRule

---- Data Groupの定義 ----

class bots {
  "scooter"
  "slurp"
  "msnbot"
  "fast-"
  "teoma"
  "googlebot"
}

---- iRuleの定義 ----

when HTTP_REQUEST {
  if { [matchclass [string tolower [HTTP::header User-Agent]] contains $::bots] } {
    pool slow_webbot_pool
  } else {
    pool default_pool
  }
}

--------------------------------------

※F5ネットワークスジャパンでは、サンプルコードについて検証を実施していますが、お客様の使用環境における動作を保証するものではありません。実際の使用にあたっては、必ず事前にテストを実施することを推奨します。