PHP
nginx
AWS
laravel

Laravelで無理矢理HTTPS化

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化が実現できました。
やれやれ。