アジェンダ
前提
AWSを使ってwordpressを2台構成にした後、負荷分散させる構成。
ちなみにALBの前にはCloudFrontが噛んでいて、CloudFrontはSSL化している。
ALB−EC2間はHTTP Onlyにしてある。
CloudFrontから443でアクセスしてるのに、WEBページを見るとなぜかHTTPページが生成される問題。というかエラーでちゃんと見れない。
AWSリソース
- AmazonLinux * 2
- CloudFront
- Application Load Balancer
- Route53
- RDS
- ACM
- S3
- VPC
結論
WordPressはリバースプロキシ(今回の場合CloudFront)が挟まると、リバースプロキシの環境変数を読み込んでくるらしい。
そこはWordPressの仕様なので諦めて、wp-config.php内で強制的にHTTPSリダイレクトをさせる。
/** Sets up WordPress vars and included files. */ $_SERVER['HTTPS'] = 'on'; $_ENV['HTTPS'] = 'on'; require_once(ABSPATH . 'wp-settings.php');
ポイントは、wp-setting.phpが読み込まれる前に記述すること
これをしないと、リダイレクトループから抜けられる代わりに「このページにアクセスする権限がありません。」と出力されて管理者ページに入れなくなる。
以上の設定と、CloudFrontのBehaviorsのViewer Protocol Policyが「Redirect HTTP to HTTPS」になっているか確認。あとCloudFrontページで確認できるCNAMEsの値や、Route53のレコードなど適切に設定していればWordPress管理者ページにHTTPSで表示される はずだ。
原因
CloudFront(443)→ALB(80)→EC2(80)
外部からのアクセスは443なのに、WordPressは80でページを生成することになるためページがエラーを起こしてしまうらしい。
そんなわけでWordPressには一旦騙されてもらえばいい。
ALBから80でアクセスしに来たものを443で来たと認識させることで、リダイレクトループもなくなる。
忘れないようにしよ。
参考
WordPress + HTTPS + リバースプロキシ = このページにアクセスする権限がありません。