クラウド型WAFのImperva Incapsulaのキャッシュについて
こんにちは、コカコーラ好きのカジです。
Imperva Incapsula(インパーバ インカプスラ)はクラウド型WAFです。Incapsulaって何?という方は、ここを参照ください。 *弊社内で間違って呼ぶことがあるので、ふりがなを付けてみました。
Incapsulaは、AWSのCloudFrontと同様にCDN(Contents Delivery Network)の機能(キャッシュ機能)も持っています。
Incapsulaでは、元々のコンテンツ提供をするサーバのことをオリジンと呼びます。Incapsulaはオリジンから提供されるコンテンツを、世界規模に分布するwebトラフィックの検査およびアプリケーションの防御するIncapsulaのサーバ上にキャッシュされ、コンテンツを配信しているそうです。
Incapsulaのキャッシュモード
Incapsulaで用意しているキャッシュのモードは以下の4つとなります。
「Settings」 > 「Performance」 > 「Content Caching」で設定できます。
モード | 機能概要 |
---|---|
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」で設定可能です。
上記の「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?