クラウド型WAFのImperva Incapsulaのキャッシュについて

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、コカコーラ好きのカジです。

Imperva Incapsula(インパーバ インカプスラ)はクラウド型WAFです。Incapsulaって何?という方は、ここを参照ください。 *弊社内で間違って呼ぶことがあるので、ふりがなを付けてみました。

Incapsulaは、AWSのCloudFrontと同様にCDN(Contents Delivery Network)の機能(キャッシュ機能)も持っています。

Incapsulaでは、元々のコンテンツ提供をするサーバのことをオリジンと呼びます。Incapsulaはオリジンから提供されるコンテンツを、世界規模に分布するwebトラフィックの検査およびアプリケーションの防御するIncapsulaのサーバ上にキャッシュされ、コンテンツを配信しているそうです。

Incapsulaのキャッシュモード

Incapsulaで用意しているキャッシュのモードは以下の4つとなります。

「Settings」 > 「Performance」 > 「Content Caching」で設定できます。 incapsula-cache-01-performance

モード 機能概要
Disable Caching すべてのコンテンツは、Webサーバーから転送されます。
Static Only 標準のHTTPヘッダーなどによる静的なマークされていたコンテンツのみをキャッシュ。
Static + Dynamic 独自の学習アルゴリズムを使用して、Incapsulaの静的リソースと動的生成されたリソース利用可能なすべてをキャッシュしHTTPヘッダを自動的に最適化します。アルゴリズムは、鮮度を監視するように設計されています。 期間オプション(分、時間、日または週単位)は、キャッシュが更新される頻度を決定します。
Aggressive すべてのコンテンツがキャッシュされ、プロキシから提供しています。期間オプションは、キャッシュが更新される頻度を決定します。このモードは、静的なHTMLのサイトに向いており、サイトがダウンした場合でも、サイトのキャッシュされたコピーを提供するために使用することができます。

オリジンのヘッダ設定とIncapsulaのキャッシュ動作

これから導入される方は、サーバ側でCache-ControlやExpiresヘッダ設定を実施済みかと思います。キャッシュするとオリジン上のコンテンツの更新(定期的にファイルの差替えを行う場合等)もあり、内容が乖離してしまうという問題があります。

オリジン(コンテンツ元)のヘッダ設定とのIncapsulaのキャッシュの関連性について表にまとめてみます。

オリジン側の設定項目 Disable StaticOnly Static+Dynamic Aggressive
Cache-Control 設定無し キャッシュしない キャッシュしない 独自のアルゴリズムによりキャッシュの可否を検査し、必要であればキャッシュする ※キャッシュ期間は Static+Dynamic の設定値を使用。デフォルトは5分間 Aggressive の設定値の間、キャッシュに保持 ※デフォルトは1時間
Cache-Control max-ageを指定 ※「0」以外の値を設定した場合 キャッシュしない IncapsulaはCache-Control max-age の値の間、キャッシュに保持 Cache-Control max-age の値の間、キャッシュに保持 Aggressive の設定値の間、キャッシュに保持 ※デフォルトは1時間
Cache-Control max-ageとs-maxageを設定 ※「0」以外の値を設定した場合 キャッシュしない Cache-Control max-age の値の間、キャッシュに保持 ※s-maxageは使用せず、max-ageで指定した値となる Cache-Control max-age の値の間、キャッシュに保持 ※s-maxageは使用せず、max-ageで指定した値となる Aggressive の設定値の間、キャッシュに保持 ※デフォルトは1時間
Expriesを設定 キャッシュしない Expires ヘッダーの日付までキャッシュに保持  Static+Dynamic の設定値の間、キャッシュに保持 ※デフォルトは5分 Aggressive の設定値の間、キャッシュに保持 ※デフォルトは1時間
Cache-Control no-cache、no-storeを設定 キャッシュしない キャッシュしない キャッシュしない Aggressive の設定値の間、キャッシュに保持 ※デフォルトは1時間

Incapsulaの個別キャッシュ設定

オリジン側のヘッダ設定以外にIncapsulaでも個別にキャッシュ設定が行えます。 例えば、Static Onlyだが、個別にファイル拡張子指定でキャッシュさせたくない場合は、 上記キャッシュモードの下部分の「Advanced Caching Rules」 > 「Never cache the following resources」で設定可能です。

incapsula-cache-02-advance-cache

上記の「URL is」プルダウンで、「URL ends with」を選び、「rss」等と指定すると、

/hogehoge.rss
/home/hogehoge.rss

などがマッチして、拡張子「rss」がキャッシュされないようにもできます。

詳細はSite performance settingsを参照ください。

まとめ

IncapsulaのキャッシュモードのStatic Onlyは、ほとんどオリジンのヘッダー設定のままキャッシュ操作されるため、導入しやすいことがわかりました。 Static+Dynamic、Aggressiveのキャッシュ動作は、動作を理解した上で利用しましょう。

参考元(Incapusla Support サイト)

What is caching and how does it work?

How to control the way my site is cached

Site performance settings