#author("2020-04-29T00:48:26+00:00","default:wikiadmin","wikiadmin") -CDN #contents *概要 [#jb53e6e9] CDNとしてコンテンツをキャッシュできる。全世界にキャッシュを持つので、キャッシュクリアや設定の変更反映には時間がかかるので注意。またCloudFrontにキャッシュさせるとブラウザキャッシュにも入ってしまうので、なんかおかしいなと思ったらブラウザのキャッシュクリアも試してみること。設定の変更には時間がかかるので検証する場合はまとめて&気長に! *CloudFront 用語集 [#a1df3a3c] |Distribution|CloudFrontの一番大きな管理単位| |Origin|Distributionに複数配置可能。次のBehaviorsにて/path以下を別ドメインに割り当てるなんてことも可能。| |Behaviors|パスに対してどのoriginを割り当てるかの設定。クエリーストリングを渡さないのがデフォルトなので注意| |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"); **キャッシュかどうかの見分け方 [#efcf783f] -ヘッダーにX-Cacheが付与されている。 |キャッシュがないとき|X-Cache: Miss from cloudfront| |キャッシュ有通常ページ|X-Cache: Hit from cloudfront| |キャッシュ有かつエラーページ|X-Cache: Error from cloudfront| *キャッシュ無効化 [#o1377c31] キャッシュ無効化は1000件までは無料。ワイルドカードでも良いので消したいフォルダの上位で指定するのが無駄なくて良い。無効化は各エッジサーバーに伝播するのに、結構時間がかかるのとObjectの数が3000個らしいので頻繁に変わるところは適宜キャッシュコントロールを付けるのがおすすめ。 *エラーページ [#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経由だと機能しない) #counter