今回やろうとしていること
- AWSが提供する高速・高パフォーマンスなコンテンツ配信サービス(CDN)
- ユーザを最寄りのエッジサーバに誘導することで高速な配信を実現
- コンテンツをエッジサーバでキャッシュしてオリジンサーバの負荷を減らすことで安定した配信を実現
是非使いましょうといえるナイスなサービスです。
当ブログにおけるCloudFront設置目的
CloudFrontのメリット活用は勿論ですが、
- AWS WAF(WAF:Webアプリケーションファイアーウォール)連携によるセキュリティ強
- 常時SSL化
に使いたいというのが目的となります。
こちらに関しては別の記事にてごご紹介しようと思っています。
CloudFrontの設定
Distributionの作成
CloudFrontコンソールを開き、[Distribution]->[Create Distribution]をクリックします。
[Origin Domain Name]にCloudFrontがアクセスするドメイン名を入力します。
※検索エンジン等で外部に公表しないドメイン名を入力します。
※事前にRoute53でAレコードの設定を行っておく必要があります。
入力後TABキーを押すと[Origin ID]に値が自動入力されますが、こちらはそのままの値でOKです。
[Default Cache Behavior Settings]は次の内容で設定しました。
- Viewer Protocol Policy
常時SSL化は後日に行う事にしましたので、[HTTP and HTTPS]にしました。
- Allow HTTP Methods
GET,HEAD,OPTIONS,PUT,POST,PATCH,DELETEを選択。
- Cache Based on Selected Request Headers
WhiteListを選択。
- Whitelist Headers
- CloudFront-Forwarded-Proto(Originへプロトコルを通知)
- Host(Originへホスト名を通知)
を設定。
参照記事によると常時SSL化を行う際にポイントとなる設定との事ですので、後日行う常時SSL化に備え現段階で設定しておく事にしました。
- TTL
デフォルトのままです。
- Forward Cookies
ALLを選択。
- Query String Forwarding and Caching
Forward ALL,cache based on ALLを選択。
他の項目はデフォルト設定のままです。
Behaviorの設定(設定を見直しました)
Distributionの作成後、[Behaviors]-[Create Behavior]から
- /wp-admin/*
- /wp-login.php
- *.php
を作成しました。
管理画面系コンテンツやphpファイルについて、TTL=0(キャッシュしない)で設定しておきます。
- Viewer Protocol Policy
常時SSL化は後日に行う事にしましたので、[HTTP and HTTPS]にしました。
- Allow HTTP Methods
GET,HEAD,OPTIONS,PUT,POST,PATCH,DELETEを選択。
- Cache Based on Selected Request Headers
ALLを選択。
- TTL
Cache Based on Selected Request Headers:ALLを選択すると0になります。
- Forward Cookies
ALLを選択。
- Query String Forwarding and Caching
Forward ALL,cache based on ALLを選択。
他の項目はデフォルト設定のままです。
補足 Cache Based on Selected Request Headers設定について
AWS公式マニュアルに次の記載がありました。
完全にキャッシュさせず、オリジンに常にリクエストを送信する場合は、ALLを選択した方が良いようです。
ErrorPageの設定
エラーページで運悪く500,502発生した場合は10秒でキャッシュ削除するようにしました。
DNS設定
DomainNameに設定された xxx.cloudfront.netのドメイン名をAlternate Domain Names(CNAMEs)に設定したドメイン名のCNAMEにDNSサーバで設定します。
Route53の場合はAliasレコードでの設定でOKです。
WordPressの設定変更
WordPressの設定変更を行う前に保険でEBSのスナップショットを取っておきましょう。
その後、WordPressの設定よりCloudFrontのURLに変更します。
もし管理画面にアクセスできなくなった場合、こちらの設定を行って頂くことでアクセスできるようになりますが、暫定的な対処方法です。
解決するにはデータベースのwp-optionsテーブルのoption_name in (‘siteurl’,’home’)
をSQLのupdateで正しい値(URLまたはEC2インスタンスのPublicIP)で更新する必要があります。
SQLでのリカバリーが難しいようでしたら、スナップショットからリカバリーしましょう。
まとめ
- これでAWS WAFを設定する下地が整いました
- 後日、他の方のご指摘や勉強会でCloudFrontの設定は相当奥が深い事が分かりました。勉強して今後改善しようと思います。
- 常時SSL化はまた別の機会に・・・