問題になったこと
AzureのApplicationGatewayを前段に置いて、後ろにLaravelのWebサーバーがある構成で、
何故かLaravelから生成されるURLが非SSLになって色々と困ったので備忘録
結論
原因
Laravelは特に指定がなければ、サーバー変数$_SERVERの値を使ってURLを生成する。
ApplicationGatewayより後ろを非暗号化httpで通信していたため、Laravel側はhttpのURLを生成していた模様。
解決方法
二種類ある
1. Apache側でサーバー変数を書き換える
ApacheのVirtaulhostに下記の設定を追加
SetEnv HTTPS on
これで$_SERVER["HTTPS"]が強制的にONになるので、
Laravel側でもhttpsのURLが生成されるようになる
2. Laravel側でURL生成に使う値を強制的に変更する
下記の処理をAppServiceProvider.phpに加えることで強制的にURL生成に使い値を変更することが可能
Illuminate\Support\Facades\URL::forceRootUrl('url')
Illuminate\Support\Facades\URL::forceScheme('https')
詳細は下記コラムが参考になりました。
より詳しい処理の詳細は下記を確認していただければと。