WordPress: ブロックエディタがCloudFront経由で動かない
CloudFront経由でWordPressにアクセスするとブロックエディタ(Gutenberg)が使えなくなる問題の原因と解決策
概要
CloudFront経由でWordPressにアクセスすると、ブロックエディタ(Gutenberg)が使えなくなる、またはクラシックエディタのビジュアルタブが表示されない問題。原因はUser-Agentヘッダーがオリジンに転送されていないことです。
症状
- ブロックエディタが表示されず、HTMLエディタのみになる
- クラシックエディタで「ビジュアル」タブが消える
- 投稿編集画面が正常に動作しない
- メディアのアップロードができない
原因
- User-Agentヘッダーの欠落: CloudFrontがオリジンにUser-Agentを転送していない
- WordPressのブラウザ判定: User-Agentでデスクトップかどうかを判定している
- デフォルトのリクエストポリシー: CloudFrontはデフォルトでUser-Agentを「Amazon CloudFront」に置き換える
なぜ起きるのか
WordPressはUser-Agentを見て、ビジュアルエディタを表示するかどうかを決定します。CloudFrontがUser-Agentを転送しない、または「Amazon CloudFront」に置き換えると、WordPressは「デスクトップブラウザではない」と判断し、ビジュアルエディタを無効化します。
クライアント → CloudFront → WordPress
↓
User-Agent: Amazon CloudFront
↓
WordPress: "デスクトップじゃない?エディタ無効化"
解決策
1. オリジンリクエストポリシーを設定
CloudFrontのディストリビューション設定で、User-Agentヘッダーをオリジンに転送します。
AWS Console での設定:
CloudFront > ディストリビューション > ビヘイビア編集
オリジンリクエストポリシー:
- 「AllViewerExceptHostHeader」を選択
または
- カスタムポリシーで User-Agent を含める
2. マネージドポリシーを使用
AWSが提供するマネージドポリシー「AllViewerExceptHostHeader」を使用すると、User-AgentとRefererを含む多くのヘッダーが転送されます。
オリジンリクエストポリシー:
Managed-AllViewerExceptHostHeader
3. wp-admin用のビヘイビアを作成(推奨)
管理画面用に専用のビヘイビアを作成し、キャッシュを無効化してすべてのヘッダーを転送します。
パスパターン:
/wp-admin/*/wp-login.php/wp-json/*
設定:
キャッシュポリシー: CachingDisabled
オリジンリクエストポリシー: AllViewerExceptHostHeader
許可されたHTTPメソッド: GET, HEAD, OPTIONS, PUT, POST, PATCH, DELETE
4. AWS CLI で設定
| |
5. Terraform での設定例
| |
確認方法
オリジンに届いているヘッダーを確認
| |
CloudFront経由かどうか確認
| |
よくある間違い
- キャッシュポリシーとオリジンリクエストポリシーを混同する
- 管理画面をキャッシュしてしまう
- POSTリクエストを許可し忘れる
- Cookie転送を設定し忘れる(ログイン状態が維持されない)
パフォーマンスへの影響
User-Agentを転送すると、CloudFrontのキャッシュヒット率が下がる可能性があります。User-Agentの値ごとに別のキャッシュエントリが作成されるためです。
対策:
- 管理画面(
/wp-admin/*)はキャッシュ無効化 - フロントエンドは必要最小限のヘッダーのみ転送
- 静的アセット(
/wp-content/uploads/*)は完全にキャッシュ
参考リンク
関連エラー
関連エラー
この記事は役に立ちましたか?