前提
通信の流れは クライアント ➜ AWS ALB(SSL有) ➜ nginx ➜ php(Laravel) でクライアントはhttpsリクエストをしている。
上記条件の時にTrustProxies.php
で
➜ $proxies
になにも設定しない場合
route(), asset()メソッドで生成されるURLはhttp://~~~
になる
➜ $proxies = '*'
とした場合
route(), asset()メソッドで生成されるURLはhttps://~~~
になる
なぜ$proxies
の設定でhttp
→https
に変わるのか。
まず$proxies
になにも設定しない場合、プロキシから送信されるX-ForwardedヘッダーをLaravelが無視する。
無視されるヘッダの中には通信プロトコル情報のX-Forwarded-Proto
も含まれる。
この場合Laravelはクライアントがhttp
or https
どちらでアクセスしてきているのか判別できないので、生成するURLはhttp
で返す挙動になる。
一方で$proxies = '*'
の場合、X-Forwarded-Protoヘッダを読み取って通信元のプロトコルをチェックする。
上の例ではプロトコルをチェックした結果、通信元がhttps
プロトコルでリクエストしていることがわかるので、route(),asset()で生成されるURLは合わせてhttps
にしている。
注意点
$proxies
のデフォルトは何も設定されてないので、そのままだとhttp://~~~
のURLが生成されてしまう。
本番環境ではちゃんと$proxies
に値を設定すること!
参考