CakePHP3でHTTPSにする
表題の件ですが、以前も同じような記事を書いています。
しかし、基本的にHTTPアクセスしていたものをHTTPSでリダイレクトさせているだけです。
以前対応した時は、AWSのELB(Elastic Load Balancing)で80番ポートも443番ポートも解放していたので、80番でアクセスしてきたものを443番でリダイレクトして解決させたのです。
がしかし、今回この構成をベースに新たなサービスの開発をする際にハマりました。。
環境自体は私が構築しないので、サーバー管理に依頼して出来上がってきた時に一言添えられていました。
【HTTPアクセスは推奨しないのでHTTPSしか許可していない構成です】
まあ、HTTPSなんて当たり前だから気にもせずコードをGITからcloneして配置
アクセスしてみると、以前と同じようにHTTPSからHTTPに切り替わる
と言うことでhttpd.conf(正確にはvirtualhost.confですが)に以前やった対応を記載してgracefulをしてみると、ログインフォームからログイン時にログイン成功しているけれどもTOPページが表示されず、、、
どうやらリダイレクトしているっぽい、、、
TOPページのURLを直打ちすればログインしている状態で表示されます。
その状態で、ログアウトするとまたログインページが表示されずにグルグルとアクセスしようとしている感じがありますがページは表示されません。
少し調べると、なんとなくわかりました。
発生している場所は、CakePHPでリダイレクトしている箇所です。
その時点で気付きました。。
今回はELBは443ポートしか解放されていません。
リンクやFORMは相対パスなので現在アクセスされているプロトコルで遷移していきます。つまりはTOPから設定メニューのリンクはHTTPSでアクセスしていればHTTPSで遷移していきます。
しかしリダイレクトはリダイレクトURLを生成して転送をかけるので、ここでどうやらHTTPでURLを生成してリダイレクトしていました。
HTTPでリダイレクトする⇨ELBは443番しか受け付けない
結果アクセスできない状態だと言うことに気付きました。
ここでちょっと急ぎの対応でしたのでとりあえずサーバー管理にELBの80番も開けてよと依頼。
できたよー と連絡もらったのでアクセスしてみると
できないし。。。
サーバー管理に確認に行くと
もうおらんがな!
仕方がないのでCakePHP3でリダイレクトURLをHTTPSにする方法を調べるか、どうせそっちの方が正しい対応だしと思い取り掛かりました。
リダイレクトの部分を見ていくと
env(HTTPS)
これで有効だったら【s】つけるってなってたから環境変数設定すればいいのかと思いました。
でも環境変数ってサーバーの?どこの?ってなって調べるとヒットしたのが
dotenvを使って環境変数みたいな記事
んーー
インストールとかは無理だからなー
次にヒットしたのがベースのURLを記載すると言うもの
こちらの
アプリケーションのルートまでの (プロトコルを含む) 完全修飾ドメイン名
App.fullBaseUrl
こちらにアプリケションのドメインをHTTPSで記載して対応しました。
app.phpのAPPのセクションで以下のように変更
//'fullBaseUrl' => false,
'fullBaseUrl' => env('PROTOCOL', 'https') . '://' . env('DOMAIN', 'アプリケーションのドメイン'),
この記事を記載している時におそらくこれが一番スマートなんじゃないかと思う記事を見つけました。
CakePHP3で.envファイルを有効化する
私の担当プロジェクトではcakePHP3.5ではないかもしれませんが、もしそうであればこちらでHTTPSを有効にして完了かと思います。
なんかcakePHP2の頃はsecureみたいなのでapp.phpで設定した気がするんだけど気のせいか。。
しかし久々にPHPにさわった…
コメント
コメントを投稿