はじめに
OCIのWAFにはキャッシュ機能があります。(静的コンテンツのみ)
利用の際にはWAF以外の費用は掛かりません。
OCIのWAFを使うことで、Webページの画像読み込み 10MB 10秒が1秒に改善できました。
htmlページもキャッシュが効いて早くなりますが、わかりやすい画像データにフォーカスして説明しています。
本記事はその設定内容と結果を記載しています。
- ※注意
- WAFのキャッシュ容量は1WAFポリシー(1インスタンス)毎に1GBです。
- 動的コンテンツには対応していません。
- 他にも細かにキャッシュ対象を指定したりできない為、ヒット率の確認などができない為、CDNの代わりとは言い難い機能です。
環境
- NGINX Webサーバにサンプルのhtmlを配置し、10MBの画像を表示できるようにしています。
- フレキシブル・ロードバランサ(パブリック)(以後、FLB)を配置し、FLB経由で外部公開。SSL/TLS化。
- WAFを設置し、TLS/SSL化。設定等はこちらのQiitaが分かりやすいと思います。
- 自身の持っているドメインを用いて検証。ここでは sample.work ドメインとしています。(※実際のドメインではありません)
手順
キャッシュ・ルールの追加
WAFポリシーを開き、画面左下の「キャッシュ・ルール」を選択
「キャッシュ・ルールの追加」を押下
キャッシュ・ルールの設定
名前:<任意>
アクション:キャッシュ
キャッシュ期間:99秒(最長)
条件:「/」 に設定し、全てのパスで有効とした
WAFキャッシュポリシー設定後のイメージ
WAF キャッシュ設定反映確認
設定変更後、反映までに10分~30分かかるのでしばらく待つ
反映後、OCICLIで以下コマンドで有効になっている事を確認
(OCIDはサンプルです)
oci waas caching-rule list --waas-policy-id ocid1.waaspolicy.oc1..aaaaaaaav6ea7samplesamplesampleqnera
{
"etag": "W/\"2021-06-27T05:59:00.587Z\""
}
テスト
通常読み込み
PCのGoogle Chromeで、デベロッパーツールを表示しながらURLにアクセス。
Shift
を押しながらF5
キーで画面を再読み込み、キャッシュがクリアな状態でアクセスする。
画像データの読み込みに10秒かかっていることが分かる。
- Network タブでページ読み込みの全体の時間を確認
- Networkタブで「10MB.png」をクリックし、「Timing」タブを確認
※参考
ここで仮にF5
キーのみを押下し画面を再読み込みすると、ブラウザのキャッシュから応答している事が分かる。これはWAFのキャッシュを用いていない
WAFキャッシュにより 10秒が1秒になった結果
上述の後、99秒以内にShift
を押しながらF5
キーで画面を再読み込み
WAFからのレスポンスヘッダを見ると、キャッシュにHITしている旨がわかる
- Networkタブで「www.sample.work」をクリックし、「Header」タブを確認
- Networkタブで「10MB.png」をクリックし、「Timing」タブを確認
APPWNDIX
キャッシュアウトしたらどうなる?(99秒後)
WAFからのレスポンスヘッダから、キャッシュヒットが期限切れ(EXPIRED)になったことがわかる
この時、ページ読み込みは10秒かかる
キャッシュをパージする方法
OCI WAF側のキャッシュを削除する場合以下を実行する
反映には設定変更同様に10分から30分かかる
※注意:対象の指定はできず、WAFポリシー全体に関係する
APIでの実行可能。ここではOCICLIを用いている
oci waas purge-cache --waas-policy-id ocid1.waaspolicy.oc1..aaaaaaaav6ea7imnsamplesamplesample6fdulil6qnera
{
"opc-work-request-id": "ocid1.waasworkrequest.oc1..aaaaaaaaspnjxsc4uibqvase2yb66a3lxroeth2wn2exg53n5z2wd5fvewza"
}
参考資料
- [OCI] WAFにSSL証明書を追加して通信経路をHTTPSで暗号化する
- OCIドキュメント:キャッシングルール
- OCIドキュメント:WAF FAQ
- サンプル画像データ