VTRyo Blog

一歩ずつ前に進むブログ

CloudFront+ALB+EC2+WordPress構成のHTTPリダイレクト問題

f:id:vtryo:20180714204938p:plain

前提

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が読み込まれる前に記述すること

これをしないと、リダイレクトループから抜けられる代わりに「このページにアクセスする権限がありません。」と出力されて管理者ページに入れなくなる。

f:id:vtryo:20180714210746p:plain

以上の設定と、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で来たと認識させることで、リダイレクトループもなくなる。

忘れないようにしよ。

参考

AWSでWordPressの管理画面にログインできない

WordPress + HTTPS + リバースプロキシ = このページにアクセスする権限がありません。

リバースプロキシを経由すると、URLのホスト名がプロキシ名になる

PHPでHTTPS(SSL)接続じゃなかったらHTTPSのURLにリダイレクトする