現象
AWS等のサービス(AWS Certificate Manager)でLaravelアプリをSSL化させようとすると、以下のようにlaravelのassetヘルパーで読み込むファイルを指定している箇所(asset('css/app.css')等)が自動的にhttpで展開され、cssとjsのロードエラーがフロントで発生してしまいます。
<link href="{{ asset('css/app.css') }}" rel="stylesheet">
いくつか方法はあるようですが、本記事では、.envファイルの環境変数を元に、判定できる用法をご紹介します。
.envファイルの修正
アプリケーション環境を本番用に設定する
# APP_ENV=devAPP_ENV=prod
サービスプロバイダの設定
app/Providers/AppServiceProvider.phpのbootに下記のように記載します
「APP_ENVが本番モードだったら、URL生成でhttpsを強制する」という意味合いです
public function boot(UrlGenerator $url)
{
if(env('APP_ENV') === 'prod') {
$url->forceScheme('https');
}
}
プロキシ設定
AWSでロードバランサー等を介してサーバーにアクセスする場合は、App\Http\Middleware\TrustProxies以下の設定も必要です。
(AWSのロードバランサーはipアドレスが動的に変わるためワイルドカードを指定)
protected $proxies = '**';
公式ドキュメントより引用
Amazon AWSまたは別の「クラウド」ロードバランサープロバイダを使用している場合、実際のバランサーのIPアドレスがわからない場合があります。この場合、
*
を使用してすべてのプロキシを信頼できます。
まとめ
いかがでしたでしょうか。本記事では、LaravelアプリをSSL化する際の注意点をまとめました。AWSやGCPなどでアプリケーションを公開し、SSL化させる際、Laravelのassetヘルパーを使用してjsやcssを読み込んでいるとhttpでurlが展開されるため、この場合にSSL化に必要な手順をまとめています。