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=dev
APP_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アドレスがわからない場合があります。この場合、
*
を使用してすべてのプロキシを信頼できます。
コメント