TrustProxies の問題だと思っていた
環境は、次のとおり。
- Laravel 5.6
- Apache 2
- AWS ELB (ロードバランサー)
ロードバランサーを使っていると、HTTPS であっても Laravel には 80 ポート HTTP でアクセスするため、URL を http:// に置き換えてしまいます。
これに対する対処法は公式ドキュメントがあり、Web 上に資料がたくさんあります。
しかし、どうにも HTTPS が効かなかった。
その理由は……
ただの URL ミスでした
恥ずかしながらも、URL の末尾に / を付けるか否かで挙動が変わるようですね。
<a href="/login/"><button>ログイン</button></a>
を
<a href="/login"><button>ログイン</button></a>
にしたらあっさり解決しました。
これは盲点。
TrustProxies の仕様変更
現在 TrustProxies を検索すると、5.5 の情報がよく出てきます。
しかし、5.5 と 5.6 は微妙に仕様が変わっています。
最後の「信用するプロキシの設定」を見てください。
よーく見ると、
5.5 はprotected $proxies = '**';
だけど 5.6 はprotected $proxies = '*';
になってます。
あと、5.6 には AWS ELB を考慮した Request::HEADER_X_FORWARDED_AWS_ELB が追加されてるようですね。
これも盲点。