Ruby
Rails
nginx
devise
HTTPS

httpsでdeviseを使ってログイン機能を実装した話

自分用のメモなので見づらくて申し訳ないです...

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
1. httpのリクエストをhttpsにリダイレクトする
2. セキュアなクッキーを通知する
3. HTTP Strict Transport Security (HSTS):ブラウザにhttpsでしか通信できないと通知する

proxy_set_header X-FORWARDED_PROTO https;

proxy_set_header
要求されたヘッダーにhttpsの通信であることを追加している?