AWSでロードバランサ―を使ったHttps通信でlaravelで発生するエラー(419)の解決方法
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になっているので有効化します。