WordPress
AWS
CloudFront

CloudFrontの下でWordpressを実行する時に色々ハマった話 後編

前編の続きです。

Wordpressの設定

wp-config.php の編集が必要です。

変更前

wp-config.php
// If we're behind a proxy server and using HTTPS, we need to alert Wordpress of that fact
// see also http://codex.wordpress.org/Administration_Over_SSL#Using_a_Reverse_Proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        $_SERVER['HTTPS'] = 'on';
}

変更後

wp-config.php
// If we're behind a proxy server and using HTTPS, we need to alert Wordpress of that fact
// see also http://codex.wordpress.org/Administration_Over_SSL#Using_a_Reverse_Proxy
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
        $_SERVER['HTTPS'] = 'on';
} elseif (isset( $_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO']) && $_SERVER['HTTP_CLOUDFRONT_FORWARDED_PROTO'] === 'https') {
        $_SERVER['HTTPS'] ='on';
}

解説

前編も含めて解説します。

AWS Certificate Manager での証明書取得

はい。まず最初のハマりポイントです。
CloudFrontで利用する証明書は、必ずバージニア北部リージョンで取得しましょう。
東京リージョンで取得しても、CroudFrontに割り当てる事ができません。
ハマリポイント ★★★★☆

Origin Domain Name 設定

ALBを作成している場合は、ここにALBの選択肢が自動で出てきますが、EC2に直接アクセスする場合は出てきません。
パブリックDNSをEC2インスタンスのコンソールからコピペする必要があります。
めんどくさい度 ★★☆☆☆

EC2 セキュリティグループの設定

CloudFrontから直接アクセスさせる場合は、世界中のエッジサーバからEC2へアクセスが来る事になります。
この為、セキュリティグループをAll(0.0.0.0/0, 0::)で開ける必要があります。
セキュリティに不安がある場合は、多少お金がかかっても素直にALBを使いましょう。
ALB用にもACMで証明書を取得し、HTTPSでも待ち受けるようにしておけば安心です。
セキュリティ大丈夫なの?度 ★★★★☆

デフォルト Allowed HTTP Methods の設定

本来であれば、読み込みのみのコンテンツは Get, HEAD のみに絞るのが理想的です。
ですが、Wordpressはそんなに甘くありません。
セキュリティ上の不安が残りますが、素直に全通しにしましょう。
URL変換せずにPHPアクセスはきちんと.phpにアクセスしろ度 ★★★☆☆

HTTP Header の Whitelist

Wordpressは自身のホスト名(SiteURL)を持って制御していますので、Hostヘッダを通すことは必須です。
またHTTPSを利用する場合、Wordpressに何とかしてクライアントからのアクセスプロトコルを伝えなければリダイレクトループにハマリます。
さらに、誰でも管理画面にアクセスできると問題なので、Authorizationでベーシック認証をかけるといった対策も必要です。
CMSがFQDNを持つな度 ★★★★★
CMSが勝手にリダイレクトするな度 ★★★★★

Forwarded-Proto での制御

CloudFrontはX_FORWARDED_PROTOヘッダを削除します。
その代わり、CloudFrontはCLOUDFRONT_FORWARDED_PROTOヘッダにてクライアントからのアクセスプロトコルを通知します。
参考URL:HTTP リクエストヘッダーと CloudFront の動作
この為、Wordpressの設定ファイルに最初から入っているHTTP_X_FORWARDED_PROTOでの制御は全くの無意味です。
最初から勝手にリダイレクトしなきゃ良いだけだろ度 ★★★★★

まとめ

何も知らなくてもそれなりの物を作ることができるWordpressですが、逆に言うと勝手に色々やらかしてくれます。
特にURL変換とかリダイレクトとか!
CDNを利用する場合では特に一筋縄ではいかないので、一つ一つ動作を理解して設定する必要があります。
皆様、良いWordpressライフを!(半ギレ