はじめに:
CACHE関連のコマンドとイベントを紹介します。

BIG-IPのメモリーに特定のオブジェクトをキャッシュするRAM Cache機能は、HTTPプロファイルで利用できます。
デフォルトのRAM Cache設定では、Cache-Control系のヘッダを無視することによって、キャッシュ内のコンテンツ無効化(Expire)とオリジンウェブサーバ(OWS)への再確認はBIG-IPの内部タイマーにより決まります。つまりOWSの設定問わず、キャッシュされたすべてのコンテンツが同じ扱いになります。

あるサイトでは特定のコンテンツを長くキャッシュして、違うコンテンツを短くキャッシュしたいケースもあります。
その場合はどのような対応が必要でしょうか?
1つの方法としては、HTTPプロファイル中のRAM Cache設定で、Ignore Headersの項目をデフォルトであるALLからNoneへ変更することです。
そうすると各OWSにてコンテンツ毎のキャッシュ時間設定が利用できます。

しかし、フロントエンドとしてBIG-IPを利用しているので、Cache関連の設定を一箇所でまとめると、構築が少し楽になる場合があります。それは、RAM Cacheの設定とiRulesのCACHEコマンド、イベントの組み合わせで実現できます。

以下でも詳細をご確認いただけます。
http://devcentral.f5.com/Default.aspx?tabid=63&articleType=ArticleView&articleId=283


タイトル:
URIパスによる異なるCache無効化(Expire)時間を設定

メリット:
URIパスによって、管理者が決めたキャッシュされた時間を過ぎた場合
BIG-IPメモリー内にキャッシュされたコンテンツを一旦削除し、
BIG-IPからOWSへ同コンテンツを再度ダウンロードさせることができる。

機能解説:
BIG-IPキャッシュに保存されたコンテンツに対してクライアントからリクエストを受信した場合に、iRulesのCACHE_REQUESTイベントが発生します。
そのタイミングでURI別でコンテンツのAge(キャッシュに保存された時間)を確認しながら、それぞれのAge時間を過ぎた場合にContentsをExpireします。

コンテンツのAgeを確認するには、CACHE::ageのコマンドを利用します。
下記のサンプルではifの構文で300秒と60秒の2つの設定を確認しています。
まず長い方の300秒を過ぎた場合、/fiveminutesから始まるコンテンツを削除することにします。
これを簡単なswitch構文で確認し、一致が確認された場合CACHE::expireのコマンドで当コンテンツの削除が実行されます。

次に、elseifでAgeが60秒を過ぎたかを確認します(つまり、60>Age<300)。
その場合、異なるURIから始まるコンテンツのExpireを実行します。

設定概要:
キャッシュの保存時間を決めてから、それぞれの最大時間に合わせてそのコンテンツのURIをswitch構文に置き換えます。
また、300、60秒以外のAge時間を利用したい場合はif構文の条件式の数字を変えます。

さらに、上から長い時間の順で書けば、3つ以上のAge時間を確認したい場合はelseifの構文を追加することもできます。

【iRule定義】

 

 

when CACHE_REQUEST { 
  if { [CACHE::age] > 300 } {
    switch -glob [string tolower [HTTP::uri]] {
      "/fiveminutes1/*" -
      "/fiveminutes2/*" -
      "/fiveminutes3/*" {
        CACHE::expire
        log local0. "Matched 5 minutes"
      }
    }
  } elseif { [CACHE::age] > 60 } {
    switch -glob [string tolower [HTTP::uri]] {
      "/shorttimer1/*" -
      "/shorttimer2/*" -
      "/shorttimer3/*" {
        CACHE::expire
        log local0. "Matched 60 seconds"
      }
    }
  }
}

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