2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

IBM Cloud CISの動作確認(5) -cache編-

Last updated at Posted at 2020-09-18

##目的
IBMCloud InternetServicesを活用して、CISを経由したWebサーバへのロードバランスを試す。
今回は、マルチAZ環境でCISのグローバルロードバランサ(GLB)の環境でキャッシュ機能の動作確認をする。
CISは30日間無料でお試しできるので是非やってみましょう

六部に分けて記載する予定です。

##環境

  • ローカル端末: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台

###概要構成図
TOK05/TOK04
kou検証_日々更新.png

##はじめに
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秒に変更してみる。
Cloud_Internet_Services_-_IBM_Cloud.png

ローカル端末での作業

アクセス確認
キャッシュパージを行ったので、キャッシュ有効期限が期限切れとなり、新しく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サーバがダウンしていてもコンテンツを返す。
本機能が有効に動作しているか、確認した。

Cloud_Internet_Services_-_IBM_Cloud.png

ローカル端末での作業
はじめに、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ポータルでの作業
参考:キャッシングに関するページ・ルールの使用

指定したページにマッチしたアクセスが来た場合、に特定のルールを適用させる機能をいくつか試してみた。
パフォーマンス -> ページ・ルール -> ルールの作成を選択
Cloud_Internet_Services_-_IBM_Cloud.png

**「*.m365.work/*」**でアクセスが来た場合の動作とし、有効をオンにしてルールを決める。
貼り付けた画像_2020_09_17_9_49.png

###ブラウザー・キャッシュTTL
ブラウザーキャッシュTTLを1day(86400)で強制する。
Cloud_Internet_Services_-_IBM_Cloud.png
ローカル端末での作業
想定通り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ポータルでの作業
すべてをキャッシュにした場合、デフォルトではキャッシュされないコンテンツをキャッシュするか確認する。

Cloud_Internet_Services_-_IBM_Cloud.png
ローカル端末での作業
変更前はキャッシュバイパスされている

% 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圧縮
Cloud_Internet_Services_-_IBM_Cloud.png

デフォルトは無効となっており、gzipで圧縮されている。
https___glb_m365_work.png
https___glb_m365_work.png

有効にする
Cloud_Internet_Services_-_IBM_Cloud.png

有効すると、Brotli圧縮されていることがわかる。
コンテンツサイズも微妙だが小さくなった。
https___glb_m365_work.png
https___glb_m365_work.png

##続きはこちら
IBM Cloud CISの動作確認(6) -Security編-

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?