Laravelでロードバランサを挟んだ時のisSecure判定を動作させる
Laravelの小ネタ。
ELBなどのロードバランサを挟むと Request
の isSecure
が正しく動作してくれなかったのでメモ。
ブレードでリンクを生成する時に、`と記述して組み立てていたのだが、ローカル環境では正しく
httpsのURLで絶対パスが指定されていたのに、herokuにアップした途端に
http`で生成されるようになってしまった。
Request
のroot()
がどうやって判定しているのかを辿っていくと、getScheme()
というRequestの関数内で、以下のように判定して取得していた。
1 2 3 4 |
|
よってこの、isSecure
が正しく動作していないと思われる。
Herokuはロードバランサが標準で入っているため、その辺りだろうとググってみると公式ドキュメントがヒット。
TLS/SSL証明を行うロードバランサの裏でアプリケーションが実行されている場合、アプリケーションが時々HTTPSリンクを生成しないことに、気づくでしょう。典型的な理由は、トラフィックがロードバランサにより80番ポートへフォワーディングされるため、セキュアなリンクを生成すべきだと判断できないからです。
- Laravel 5.5 HTTPリクエスト 最下部の、信用するプロキシの設定
まさにこの通りで、app/Http/Middleware/TrustProxies.php
で全てのプロキシを信用するようにしたところ、無事、https
で生成されるようになった。
1
|
|
Amazon AWSや他の「クラウド」ロードバランサプロバイダを使用している場合は、実際のバランサのIPアドレスは分かりません。このような場合、全プロキシを信用するために、**を使います。