Rails本番環境で、HTTP Origin header (https://XXXXX) didn’t match request.base_url (http://XXXXX) でエラーになる

Ruby on Rails

railsアプリを公開するため、レンタルサーバー上で準備をしていた際、上記エラーになってハマりました。
原因はよくわかりませんが、対策がわかりましたので、備忘録として残しておきます。

前提

rails + unicorn + nginx でアプリを構築しています。
ローカルでのテストでは通常終了するも、本番環境で動かすと表題のエラーになる。
「select」ではエラーなし。「insert」「update」「delete」でエラー。

経緯

テスト稼働中でもあり「https」化をおこないました。

原因

いろいろな記事にありましたが、読んでもさっぱりわかりませんでした。すみません。

対策

/etc/nginx/conf.d/default.conf」の設定に、「proxy_set_header X-Forwarded-Proto $scheme;」の一文を付け加えます。

/etc/nginx/conf.d/*****.conf」*****の部分は、アプリで変更していればそのファイルを変更してください。

 server {
   listen       443;
   server_name  ci.example.com ;
(略)
   location / {
   (略)
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header Client-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;   ← この設定を追加
        proxy_redirect  off;
        proxy_pass http://puma;
    }

まとめ

ハマると二日三日は平気で進まなくなってしまうので、自分用に備忘録として残しておきます。

コメント