2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

LaravelのTrustProxiesミドルウェアとroute(),asset()メソッドで生成されるURLの関係

Last updated at Posted at 2024-01-27

前提

通信の流れは クライアント ➜ AWS ALB(SSL有) ➜ nginx ➜ php(Laravel) でクライアントはhttpsリクエストをしている。

上記条件の時にTrustProxies.php

$proxiesになにも設定しない場合

route(), asset()メソッドで生成されるURLはhttp://~~~になる

$proxies = '*'とした場合

route(), asset()メソッドで生成されるURLはhttps://~~~になる

なぜ$proxiesの設定でhttphttpsに変わるのか。

まず$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に値を設定すること!

参考

2
1
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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?