AWSのCloudFront -> ELB -> EC2 -> nginx -> php-fpm
というよくある構成で、
LaravelがリクエストをHTTPと認識して困ってました。
EC2に到達しているときにはHTTPだからです。
actionやurlヘルパなどについては、なんとかなりました。
View::shareでHTTPS判定フラグをセットして
上記ヘルパの引数にセットすれば、
https://...というURLを生成してくれるからです。
(でも、これは相当面倒)
{{!! action('xxx', [], $secure) !!}
ただ、FormRequestで自動的にredirect backされるケースでは、
HTTPにリダイレクトされてしまってどうにもなりませんでした。
そこで、リクエストURLからホスト名を
$host = parse_url(request()->url(), PHP_URL_HOST)
のように取得し、ホストがCloudFrontやELBの場合のみ
$server = request()->server;
$server->set('HTTPS', 'on');
$server->set('SERVER_PORT', '443');
という処理をApp\Providers\AppServiceProvider::bootに記述しました。
これで、常時HTTPS化が実現できました。
やれやれ。