LoginSignup
16
17

More than 5 years have passed since last update.

Laravel プロジェクトで AWS の ELB(ALB) 443(HTTPS) -> EC2 80(HTTP) とした時、 route() などを期待した動作(https)にする

Posted at

以前に Laravel プロジェクトを AWS の ELB 443(HTTPS) -> EC2 80(HTTP) とした時、強制的に HTTPS にする方法 というのを書きました。

実は、以前の方法である URL::forceSchema('https'); を使うのはあまりよろしくありません。

どうするのが良さそうか

https://github.com/fideloper/TrustedProxy を使う。

laravel 5.5 からはデフォルトで入ってるはず。

5.4 以前を使っている場合は https://github.com/fideloper/TrustedProxy#tldr-setup に従ったインストールしましょう。

$ php artisan vendor:publish --provider="Fideloper\Proxy\TrustedProxyServiceProvider"

これで、 ./config/trustedproxy.php が配置されます。

例えば以下のように、信頼されるアクセス元の情報を配列で指定しましょう。

/config/trustedproxy.php
    'proxies' => [
        // '172.31.0.0/16',
        '10.0.0.0/24',
        '10.0.1.0/24',
    ],
     // 全部信頼できるなら以下のように指定しても OK らしい
     # 'proxies' => '*',

これだけ。

そもそも何が起きているか

※前回も書いたけど。

ELB で https(443) を待ち受けて、内部の EC2 に http(80) で転送していると、 Laravel プロジェクト的には http で動作していることになる。

このため、 route() や redirect() などが、 http:// となってしまう。

期待する動作は、何も意識せずに route() などの結果が https:// になって欲しい。

URL::forceSchema('https'); は何が問題なのか

全部の URL が https:// になる。

全て https で処理するなら問題ないが、何らかの理由があって、 http でも処理したい場合に対処できない。

16
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
17