Masayan tech blog.

  1. ブログ記事一覧>
  2. LaravelアプリをSSL化する際の注意点(assetヘルパー)

LaravelアプリをSSL化する際の注意点(assetヘルパー)

公開日

現象

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化に必要な手順をまとめています。