AWS 公式ドキュメントが 2023年8月時点で公開している「Best Practices for WordPress on AWS」にある設定例「CloudFront distribution creation」の内容が古かったので、自分なりに改良してみました。
主な改良点は
- レガシーキャッシュルールではなく、新しいのキャッシュポリシーを使う
- wp-json ディレクトリの通信を対応する
- Facebook や広告タグのクエリをオリジンサーバーに飛ばなくする
です。
STEP.1 キャッシュポリシーを作成
絶対に CloudFront にキャッシュさせるように最小TTLを60に設定しています。アクセス頻度が少ないサイトであれば、最小TTLを増やすなどしてください。ただ、ページの更新の時間もかかるのでバランスを考えましょう。
- 名前:
0-default(適当に変えてください) - 説明: 任意
- TTL 設定
- 最小TTL:
60秒 - 最大TTL:
31536000秒 - デフォルトTTL:
86400秒
- 最小TTL:
- キャッシュキー設定
- ヘッダー:
次のヘッダーを含める-
Authorization(開発中用) Host
-
- クエリ文字列
- 次以外のすべてのクエリ文字列を含める
fb_reffbclidfb_action_typesfb_action_idsgclidutm_campaignutm_contentutm_mediumutm_termutm_source
- 次以外のすべてのクエリ文字列を含める
- Cookie
-
指定された cookie を含めるcomment_*wordpress_*wp-settings-*
-
- ヘッダー:
- 圧縮サポート
-
Gzipチェック -
Brotliチェック
-
追加するプラグイン・カスタマイズによって、必要なポリシーを増やします。
STEP 2. ビヘイビア設定
STEP 2-1. キャッシュする用のビヘイビア3つ
デフォルトのキャッシュ設定です。3つのビヘイビアを作成します。
- パスパターン:
デフォルト/wp-includes/*/wp-content/*
- オリジン: WordPress サーバーを選択
- オブジェクトを自動的に圧縮:
Yes - ビューワー:
Redirect HTTP to HTTPS(適宜変更) - 許可された HTTP メソッド:
GET, HEAD - ビュワーのアクセスを制限する:
No - キャッシュキーとオリジンリクエスト
-
Cache policy and origin request policy (recommended)- キャッシュポリシー:
0-default(もしくは自分でつけた名前)
- キャッシュポリシー:
-
STEP 2-2. 管理画面 & 動的ページの設定、3つ
管理画面や、Contact Form 7 などキャッシュできないページの設定です。3つのビヘイビアを作成します。
- パスパターン
/wp-login.php/wp-admin/*-
/wp-json/*- その他動的な動作をするプラグインで wp-json ディレクトリに向かって通信するディレクトリがあれば追加する。
- オリジン: WordPress サーバーを選択
- オブジェクトを自動的に圧縮:
Yes - ビューワー:
Redirect HTTP to HTTPS(適宜変更) - 許可された HTTP メソッド:
GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE - ビュワーのアクセスを制限する:
No - キャッシュキーとオリジンリクエスト
Legacy cache settings- ヘッダー:
すべて - クエリー:
すべて - cookie:
すべて
これで、基本的な WordPress のキャッシュ設定ができます。
追記: より細かいチューニングをしてみよう
サーバーを冗長化していたり、よりキャッシュ率を上げたい場合は、トップページのビヘイビアをつけたり、wp-json のビヘイビアルールをプラグインによってキャッシュをしたりしないルールにしたりとチューンアップしていきます。
/wp-json/* パスは奥が深い
/wp-json/* パスは現在「動的」な動作を行う場所として設定サンプルを提示しています。
ただ、追加でプラグイン・カスタマイズによってもビヘイビアルールを追加する必要がある場合があります。
例えば WordPress をヘッドレスで使用している場合、post (投稿) 関連のエンドポイントはキャッシュしたいパスです。
反対に、Contact Form 7 の様に、フォーム送信時にも/wp-json/* パスが使われるので、そこは動的パスとしての登録が必要です。
Chrome の Developer ツールなどを使い、どのパスをキャッシュするべきかを確認し調整しましょう。