こんにちは。Takitaです。
Rails5 を EC2で動かしているのですが、SSL化したタイミングでActionController::InvalidAuthenticityTokenでPOSTできなくなってしまったときの対応です。
W, [2018-01-22T14:40:21.374631 #5736] WARN -- : [adb4a978-5586-46df-9441-401d0db5b1ab] HTTP Origin header (https://example.com) didn't match request.base_url (http://example.com)
I, [2018-01-22T14:40:21.374996 #5736] INFO -- : [adb4a978-5586-46df-9441-401d0db5b1ab] Completed 422 Unprocessable Entity in 0ms (ActiveRecord: 0.0ms)
F, [2018-01-22T14:40:21.375910 #5736] FATAL -- : [adb4a978-5586-46df-9441-401d0db5b1ab]
F, [2018-01-22T14:40:21.375965 #5736] FATAL -- : [adb4a978-5586-46df-9441-401d0db5b1ab] ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
HTTP Origin header (https://example.com) didn't match request.base_url (http://example.com)
https
と http
でマッチしてないというログが怪しいということで、
nginxの設定を疑いました。
server {
listen 443 ssl;
server_name example.jp;
(省略)
location @puma {
(省略)
proxy_set_header X-Forwarded-Proto $scheme # 追加
}
}
nginx -> puma にリバースプロキシした時に http
になったままだったので、
上記を一行追加したら解決しました。