自分用のメモなので見づらくて申し訳ないです...
httpsでdeviseを使ってログイン機能を実装した話
railsでdeviseを使ってログイン機能を実装して本番環境にあげたら
真っ白いページが出てプロダクトが動きませんでした。
原因は本番環境はhttp(80番ポート)が閉じられていてhttps(443番ポート)しか
空いていませんでした。
なのでrailsがリダイレクトなどの処理を行うときにhttpでリダイレクトをしようとして
うまく動かなくなっていたみたいです。
なのでrailsとnginxにhttpsでリダイレクトをするという設定を追加しました。
config/enviroments/development.rb
または
config/enviroments/production.rb
の末尾に
config.force_ssl = true
を追加してrails自体の通信を強制的にhttpsで通信するように変えます。
ただ、このままではhttpとhttpsで何度もリダイレクトを起こしてしまうので
nginxの設定ファイルに
proxy_set_header X-FORWARDED_PROTO https;
を追加します。
これでnginxを再起動すれば動くはず!
解決するのに3日間もかかってしまったのは内緒
rails初心者なので補足などがあれば教えていただきたいです...
設定の詳細
config.force_ssl = true
rubyonrailsのconfig.force_ssl = trueの時の挙動
HTTP Strict Transport Security
- httpのリクエストをhttpsにリダイレクトする
- セキュアなクッキーを通知する
- HTTP Strict Transport Security (HSTS):ブラウザにhttpsでしか通信できないと通知する
proxy_set_header X-FORWARDED_PROTO https;
proxy_set_header
要求されたヘッダーにhttpsの通信であることを追加している?