laravelからCSRF token mismatchを解決せよ
原因1
ECSはEC2三台構成なので、セッション情報が分散するから。
対策
ALBの分散設定を「sticky session」にするか、セッション情報をredisやdatabaseに入れて共有できるようにする。
今回はredisへセッション情報を保存することにした。
ただそれだけでは解決しなかった
原因2
フロントエンドのURLと、APIのURLのドメインが違うと、Laravelがセッションを認識できない。
例えばよくあるこんなURL
フロント www.example.com
バックエンド api.example.com
開発中はどっちもlocalhostだから動く、サーバーに上げた途端に動かなくなるやつ。
対策
Laravelの環境変数、SESSION_DOMAINを設定する。
デフォルトでは完全一致でないとダメらしい。
サブドメインも含めてワイルドカードにするためSESSION_DOMAIN=.example.comとした。
そしたら動いた。
ECS難しい。