WARN: HTTP Origin header (https://xxxx) didn't match request.base_url (http://xxxx)

What

サイトをSSL化した際、GETメソッドは通るものの、CREATE, UPDATE, DELETEメソッドでエラーが発生しました。

Solution

log/production.logを確認します。

WARN -- :  HTTP Origin header (https://xxxx) didn't match request.base_url (http://xxxx)
INFO -- : Completed 422 Unprocessable Entity in 0ms (ActiveRecord: 0.0ms)
...
ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
...
FATAL -- : actionpack (5.2.4.1) lib/action_controller/metal/request_forgery_protection.rb:211:in `handle_unverified_request'

GETメソッド以外では、メソッド実行後にリダイレクトします。おそらく、Railsのデフォルトの設定で、リダイレクト時にhttpを返してしまうため、エラーが起きているのだと考えられます。

以下を追記すると、解決します。

proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;

または、以下でも大丈夫です。

proxy_set_header X-Forwarded-Proto $scheme;

AWSのELBを使用している場合は、また話が変わってくるそうです。
http://docs.docker.jp/registry/recipes/nginx.html

参考
https://www.greptips.com/posts/1238/