- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2020-04-29T03:07:18+00:00","default:wikiadmin","wikiadmin")
#author("2020-04-29T06:20:35+00:00","default:wikiadmin","wikiadmin")
-CDN
#contents
*概要 [#jb53e6e9]
CDNとしてコンテンツをキャッシュできる。全世界にキャッシュを持つので、キャッシュクリアや設定の変更反映には時間がかかるので注意。またCloudFrontにキャッシュさせるとブラウザキャッシュにも入ってしまうので、なんかおかしいなと思ったらブラウザのキャッシュクリアも試してみること。設定の変更には時間がかかるので検証する場合はまとめて&気長に!
*CloudFront 用語集 [#a1df3a3c]
|Distribution|CloudFrontの一番大きな管理単位|
|Origin|Distributionに複数配置可能。次のBehaviorsにて/path以下を別ドメインに割り当てるなんてことも可能。|
|Behaviors|パスに対してどのoriginを割り当てるかの設定。path/*をどのOriginにするかを指定する。クエリーストリングを渡さないのがデフォルトなので注意。パスはそのままoriginにわたるので/hogeだとorigin/hogeになる|
|C Name|ランダムなxxx.cloudfront.netだとアクセスしづらいのでCNameを設定できるが正規のSSL証明書が必須となった|
*キャッシュについて [#k96dff5e]
何もしないとデフォルトは24時間キャッシュ。originサーバーでのCacheヘッダーを参照するようにするとその通りに動いてくれる。no-cacheやprivateを入れていればキャッシュしない。Behaviroの設定でカスタマイズすることもできるのでurlパス単位で設定できる。
PHPだと以下のキャッシュコントロールを入れるとキャッシュされなかった。
<?php
header("Cache-Control: no-cache");
header("Cache-Control: private");
date_default_timezone_set('JST');
echo date(DATE_RFC2822);
echo date("Y/m/d G:i:s");
**QueryString Forwarding and Caching [#y7893e5b]
|None|クエリーストリング無視。完全静的ページ向け|
|Forward all, chache based on whitelist|クエリーストリングで指定パラメータ以外はキャッシュする。a=xxx&b=123でaが指定されている場合bが変わってもa=xxxのページキャッシュがかえる|
|Forward all, cache based on all|クエリーストリング列も含めてキャッシュ対象|
**キャッシュかどうかの見分け方 [#efcf783f]
-ヘッダーにX-Cacheが付与されている。
|キャッシュがないとき|X-Cache: Miss from cloudfront|
|キャッシュ有通常ページ|X-Cache: Hit from cloudfront|
|キャッシュ有かつエラーページ|X-Cache: Error from cloudfront|
*キャッシュ無効化 [#o1377c31]
キャッシュ無効化は1000件までは無料。ワイルドカードでも良いので消したいフォルダの上位で指定するのが無駄なくて良い。無効化は各エッジサーバーに伝播するのに、結構時間がかかるのとObjectの数が3000個らしいので頻繁に変わるところは適宜キャッシュコントロールを付けるのがおすすめ。
*Originの制限 [#be7adbae]
-CloudFront→OriginでSSLはダメ?(toolsがダメだった)
-CloudFront→OriginでSSLはダメ?(toolsがダメだったがWWWはOKなので別の原因だろう)
*エラーページ [#j1d32a93]
*CloudFrondの障害など [#b081c793]
年1-2回レベルで発生しているらしいので、落ちた時の対策を考えておく必要がある。
*CloudFront用のrewrite設定 [#t30d767c]
**Wordpress [#g0dfc0ad]
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !CloudFront
RewriteCond %{REQUEST_METHOD} =GET
RewriteRule ^(.*)$ http://%1クラウドフロントのURL$1 [R=301,L,NE]
最後のNEはURLエンコーディングをしないということで、これを入れないと検索できない。
**pukiwiki [#v73f4e18]
もともとno-cacheなので大して負荷軽減にはなってないぞ。
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !CloudFront
RewriteCond %{QUERY_STRING} !(cmd=edit|plugin=newpage|その他除外したいクエリー)
RewriteCond %{REQUEST_METHOD} =GET
RewriteRule ^(.*)$ http://%1クラウドフロントのURL$1 [R=301,L,NE]
同じくNE必須。
*ログの出力 [#u268976c]
ログを出力を有効にすると約10分毎にログがS3に生成される。PUTが多くなるのでS3の無料枠をはみ出すことになるので本格運用する場合はコストに含めておくべき。
*CloudFront移行 [#p660159d]
同じcnameは同時に存在できないので、移行元で別名に変更後、わりとすぐに別名で作成できる。
*S3連携 [#ud453472]
-CloudFrontからのみアクセス可能にするためにはOAIを作成後、そのUSER IDをS3のポリシーに設定。Update Bucket policyをすると該当S3のバケットポリシーを許可してくれる。
"だがうまくいかない"
**S3連携でDirectory Index実現 [#r1b67248]
-CloudFrontはDefault Root Objectが指定できるがドメイン直下のみ
-S3もIndex.htmlなどの設定ができるが、S3直接アクセスのみ(CloudFront経由だと機能しない)
Lambda@Edgeのoriginトリガー(cache missの時に動く、/をindex.htmlにするだけであればこれで十分)
#counter