Breathnote
ロードバランサを経由してLaravelにアクセスするとSSL通信にならない

ロードバランサを経由してLaravelにアクセスするとSSL通信にならない

AWSのロードバランサを経由してLaravel(EC2)にアクセスすると、SSL通信にならない場合があります。

Laravel側の設定で解消できるので、対処法をアウトプットしておきます。

原因

クライアントとLaravelのあいだにロードバランサを挟むことにより、元々のクライアントリクエストがSSL通信か否か、Laravelが判断できなくなるからです。

本件において、最終的にLaravelへアクセスするのはロードバランサです。Laravelがロードバランサからのアクセスを信用せず、リクエストヘッダを読み取らない場合、HTTPで通信してしまうようです。

対処法

Laravelが信用するプロキシの一覧に、ロードバランサのIPアドレスを追加しましょう。

AWSのロードバランサはIPアドレスが動的なので、ワイルドカードで全て許可するようにしています。

TrustProxies.php
<?php

namespace App\Http\Middleware;

use Fideloper\Proxy\TrustProxies as Middleware;
use Illuminate\Http\Request;

class TrustProxies extends Middleware
{
    // protected $proxies;
    protected $proxies = '*';
}

Laravelに対してロードバランサ以外からアクセスがある場合は、別途リクエストヘッダのカスタマイズも実施しておくことをおすすめします。