2015年7月24日

AWSのELBとHTTPSとCakePHPでハマりました

 Webサイトを作るときには、HTTPSにしてセキュアにする必要があります。


なので、AWSでELBに証明書をインストールして以下のような構成にします。

リクエスト(HTTPS:443)

ELB(HTTPS:443→HTTP:80)

Webサーバ(HTTP:80)

ですが、httpsでアクセスしているにもかかわらず、Router::fullBaseUrl()を参照すると「http」が返却されて来てしまい困ったこととになります。
例えば送信メールにURLをつけるときに「http://ホスト名/~」となってしまいます。
他にもページ遷移がちゃんとできなくなってしまうような現象もあったような気がします。

確かに、Webサーバー内に入ってくるときは、HTTP:80なので間違いではないのかもしれません。


じゃあ、どうするか。


app/Config/bootstrap.phpに以下のロジックを書いておきます。
if(isset($_SERVER['HTTP_X_FORWARDED_PORT']) && 443 == $_SERVER['HTTP_X_FORWARDED_PORT']) {
    Router::fullBaseUrl('https://'.$_SERVER['HTTP_HOST']);
}
するとちゃんと、Router::fullBaseUrl()で「https://ホスト名」を返してくれます。

0 件のコメント:

コメントを投稿