##目的
IBMCloud InternetServicesを活用して、CISを経由したWebサーバへのロードバランスを試す。
今回は、マルチAZ環境でCISのグローバルロードバランサ(GLB)の環境でキャッシュ機能の動作確認をする。
CISは30日間無料でお試しできるので是非やってみましょう
六部に分けて記載する予定です。
- 初期導入編:IBM Cloud CISの動作確認(1) -初期導入編-
- 証明書設定編:IBM Cloud CISの動作確認(2) -証明書編-
- 動作確認編:IBM Cloud CISの動作確認(3) -動作確認編-
- GLB編:IBM Cloud CISの動作確認(4) -GLB編-
- cache編:(本ページ)
- セキュリティ編:IBM Cloud CISの動作確認(6) -Security編-
##環境
- ローカル端末:macOS Catalina 10.15.6 1台
- プラットフォーム:IBMCloud
- CDNサービス:IBM Cloud Internet Services 1サービス(Freeプラン)
- ロードバランシングサービス:IBM Cloud Load Balancer 1サービス(Public to Private)
- TOK04サーバ:CentOS 7.7.1908(Virtual Server for Classic) 2台
- TOK05サーバ:CentOS 7.7.1908(Virtual Server for Classic) 1台
##はじめに
cf-cache-statusヘッダーの出力を見ることで、リソースがキャッシュされたかどうか確認できる。
下記ページより抜粋
CloudflareのCDNについて理解する
- HIT:リソースはキャッシュで見つかりました。
- MISS:リソースはキャッシュで見つかりませんでした。オリジンサーバーから提供されました。
- EXPIRED:リソースはキャッシュで見つかりましたが、有効期限が切れています。オリジンサーバーから提供されました。
- STALE:リソースはキャッシュから提供されましたが、有効期限が切れています。オリジンと通信して更新されたリソースを取得することができませんでした。
- BYPASS:オリジンサーバーは、no-cache、private、またはmax-age=0に設定したCache-Controlヘッダーを介してキャッシュをバイパスするようCloudflareに指示しました。 Origin Cache-Controlを有効にしているとBYPASSが返されます。
- REVALIDATED:リソースはキャッシュから提供されましたが、有効期限が切れています。 リソースは、If-Modified-SinceヘッダーまたはIf-None-matchヘッダーによって再検証されました。
- UPDATING:リソースはキャッシュから提供されましたが、有効期限が切れています。 リソースはWebサーバー(オリジンサーバー)によって更新されています。 通常、UPDATINGは、非常に人気のあるキャッシュされたリソースでのみ見られます。
- DYNAMIC:リソースコンテンツタイプはデフォルトでキャッシュされてません。現在のCloudflareキャッシュ設定は、リソースをキャッシュするようCloudflareに指示していません。 代わりに、リソースがWebサーバー(オリジンサーバー)からリクエストされました。 Page Rulesを使用して、カスタムキャッシングオプションを実装してください。
##キャッシュ動作の確認
ローカル端末での作業
まず前提として、htmlファイルはキャッシュされない。
キャッシュされるのは静的コンテンツのみなので、jpgファイルを用意してテストした。
originに「pic.jpg」を配置し、初回アクセスしてみる。
Edgeにキャッシュがないので、Edgeからoriginにファイルを取りに行っていることがわかる。
cf-cache-status: MISS
また、キャッシュ保持時間が3600秒であることがわかる
cache-control: max-age=3600
またキャッシュ保持から26秒経過している。
age: 26
% curl -s -I https://glb.m365.work/pic.jpg
cache-control: max-age=3600
cf-cache-status: MISS
age: 26
再度同じURLにアクセスしてみる。
今度はEdgeサーバが所持しているキャッシュにHITしているので、originへの通信までいっていない事がわかる。
cf-cache-status: HIT
またキャッシュ保持から203秒経過している。
age: 203
% curl -s -I https://glb.m365.work/pic.jpg
cf-cache-status: HIT
age: 203
###キャッシュパージ
IBM Cloudポータルでの作業
Edgeサーバが保持しているキャッシュをパージし、キャッシュ保持時間を1800秒に変更してみる。
ローカル端末での作業
アクセス確認
キャッシュパージを行ったので、キャッシュ有効期限が期限切れとなり、新しくoriginからコンテンツを取得している。
cf-cache-status: EXPIRED
また、キャッシュ有効期限を1800秒に変えたのが反映されている。
cache-control: max-age=1800
% curl -s -I https://glb.m365.work/pic.jpg
cache-control: max-age=1800
cf-cache-status: EXPIRED
参考:Cloudflareキャッシュレスポンス
参考:キャッシングに関するページ・ルールの使用
###STALEの動作確認(不整合コンテンツ)
IBM Cloudポータルでの作業
Edgeサーバがキャッシュしていれば、originサーバがダウンしていてもコンテンツを返す。
本機能が有効に動作しているか、確認した。
ローカル端末での作業
はじめに、Webサーバのサービスを停止する。
# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
キャッシュ済みのコンテンツにアクセスしてみる。
max-age1800に対して、8564秒経過しているがキャッシュHITにより、HTTP200 OKが返ってくる。
また、有効期限が切れているがEdgeからのキャッシュが返されている。
cf-cache-status: STALE
% curl -s -I https://glb.m365.work/pic.jpg
HTTP/2 200
cache-control: max-age=1800
cf-cache-status: STALE
age: 8564
##ページ・ルール
IBM Cloudポータルでの作業
参考:キャッシングに関するページ・ルールの使用
指定したページにマッチしたアクセスが来た場合、に特定のルールを適用させる機能をいくつか試してみた。
パフォーマンス -> ページ・ルール -> ルールの作成を選択
**「*.m365.work/*」**でアクセスが来た場合の動作とし、有効をオンにしてルールを決める。
###ブラウザー・キャッシュTTL
ブラウザーキャッシュTTLを1day(86400)で強制する。
ローカル端末での作業
想定通りmax-age=86400に書き換わった。
% curl -s -I https://glb.m365.work/pic.jpg
cache-control: max-age=86400
cf-cache-status: HIT
age: 3132
###キャッシュ・レベル
IBM Cloudポータルでの作業
すべてをキャッシュにした場合、デフォルトではキャッシュされないコンテンツをキャッシュするか確認する。
% curl -s -I https://glb.m365.work/
HTTP/2 200
cf-cache-status: BYPASS
変更後、想定通りキャッシュされた。
% curl -s -I https://glb.m365.work/
cache-control: max-age=1800
cf-cache-status: MISS
% curl -s -I https://glb.m365.work/
cache-control: max-age=1800
cf-cache-status: HIT
age: 2
今度は、すべてをバイパスに変更し、全てのコンテンツをキャッシュしないか確認する。
htmlおよび静的コンテンツの双方でキャッシュされない事を確認。
% curl -s -I https://glb.m365.work/
cf-cache-status: DYNAMIC
k.calc.cca1129@Koujis-MacBook-Pro ~ % curl -s -I https://glb.m365.work/pic.jpg
cache-control: private
cf-cache-status: DYNAMIC
##ページ圧縮
IBM Cloudポータルでの作業
コンテンツ圧縮が機能するか確認する。
パフォーマンス -> 拡張 -> Brotli圧縮
有効すると、Brotli圧縮されていることがわかる。
コンテンツサイズも微妙だが小さくなった。
##続きはこちら
IBM Cloud CISの動作確認(6) -Security編-