AWSでロードバランサ―を使ったHttps通信でlaravelで発生するエラー(419)の解決方法

php/laravel

AWSのロードバランサーを使ってHTTPSをする際に課題になる点がいくつか発生する。

ログイン時にHttpsアドレスでログインをしたのにリダイレクト先がHttpになるとアラートが発生

こちらに関してはchrome等でセキュリティで怒られたりする。
解決方法としては.envのurlをhttpsのアドレスに変更する。

AppServiceProvider.phpを使って、アドレスを全てHTTPSを使うようにするに設定する。デメリットとしては、全てHttps通信になってしまう。

sudo vi laravel/app/Providers/AppServiceProvider.php
use Illuminate\Routing\UrlGenerator;

   public function boot(UrlGenerator $url)
    {
        $url->forceScheme('https');
    }

上記の設定だと、開発環境もhttps通信をするようになるので、本番環境のみHTTPS通信にする場合は下記のコードになる。

$this->app['request']->server->set('HTTPS', $this->app->environment() != 'local');

ロードバランサーまではHttps通信なのに、ローカルアドレスはHttp通信になる事によるエラー

TrustProxies.phpを編集する。

sudo vi laravel/app/Http/Middleware/TrustProxies.php

下記コードを追加で、対応可能。公式によると*2個を設定。

    /**
     * The trusted proxies for this application.
     *
     * @var array|string|null
     */
    protected $proxies = '**';

複数ノードでCSRF token mismatchが発生する

.envファイルにAPP_DEBUG=true

APP_DEBUG=true

が書いてある場合はfalseにする。

AWSのスティッキーセッションを有効化する

結局今回の419エラーはこちらで解決しました。ターゲットグループから編集可能です。現在はdisableになっているので有効化します。