LightsailのWordPressの前段にCloudFrontを挟んで配信する

2019年から運用しているこのブログもおかげさまで順調にアクセス数が伸びてきているので、そろそろパフォーマンス向上やセキュリティ対策にも目を向けたいと思い、CloudFrontによるLightsailオリジンの保護とキャッシュ最適化をしてみました。

Lightsailで同じようにWordPressのブログを運用している人の参考になれば。

CloudFrontの設定

まずは、Lightsailに割り当てた静的IPを指すオリジン用のドメインをDNSに登録します。
私はRoute 53にAレコードで登録しました。

ここで登録するドメインは今まで使っていたブログのドメインとは別のものを作成します。
SSL証明書とかは設定していません。

次に登録したオリジンドメインを使ってCloudFrontディストリビューションを作成します。

デフォルトのキャッシュビヘイビアは次のように設定し、オリジンのキャッシュは行わず、すべてのリクエストをオリジンに転送します。

これだけだと、CloudFrontを挟む意味が薄いので、コンテンツ用のパスの「wp-content/*」と「wp-includes/*」はキャッシュさせるようにそれぞれビヘイビアを追加します。
後はディストリビューションに代替ドメインを設定して今までのブログのドメインを登録していたDNSのAレコードをCNAMEレコードに変えて、代わりにCloudFrontのドメインを設定します。

CloudFrontはACM証明書を使えるので、Lightsailサーバー内でLet’s EncryptでSSL証明書を更新する必要もありません。

今までと変わらない見た目で表示されればOK。
少し画像などのコンテンツの読み込みが早くなるはずです。

WAFの設定

折角CloudFrontから配信できるようになったのでセキュリティ対策にWAFも設定してみました。
そのままだとエディターからの画像アップロードや一部の機能が失敗するので「AWSManagedRulesCommonRuleSet」の「SizeRestrictions_BODY」と「CrossSiteScripting_」がプレフィックスのルールを外します。


追記

オリジン側に証明書の設定がいらないと勝手に思ってて
ここで設定したLet’s Encryptの更新のためのcronを止めてたんですが、ある日オリジン側の証明書が期限切れになってCloudFrontが502エラーを返すようになってました。

オリジン側でもCloudFrontのCNAMEに設定したドメインの証明書の更新を行ったらアクセスできるようになりました。

ということでCloudFrontを挟むにせよオリジンに証明書の設定は必要だってことですね。
勉強になりました。