Configuring Rails 3 to use HTTPS and SSL – Simone Carletti's Blogの意訳。
Rails 3.1以降
Rails3.1以降からは、このコミットによってHTTPからHTTPSへ遷移させるのがちょう簡単にできるようになった。下記のようにするだけでOK。
# config/application.rb module MyApp class Application < Rails::Application config.force_ssl = true end end
このコードの裏側では、Railsはrack-sslをミドルウェアとして追加している。Rack::SSLは自動的にHTTPのリクエストをHTTPSにリダイレクトする。あとは Strict-Transport-Security ヘッダを付けたりcookieに secure 属性付けたりの機能もあるみたい。
Rails 3.1未満
Rails 3.1未満で同じようにしたい場合は下記のようにする
config.middleware.insert_before ActionDispatch::Static, "Rack::SSL"
# Gemfile gem 'rack-ssl', :require => 'rack/ssl'
HTTPSとHTTPを両方平行して使いたい場合
HTTPベースのアプリをHTTPSに移行するのは思ってるよりも難しい。サードパーティのホスト(Herokuとかのことかな?)を使っている場合は特に。
Rack::SSL にはドキュメント化されていないけどいい感じの機能がある。:exclude オプションを使うと HTTPS の有効/無効の条件を設定できる。下記のコードは Rack::SSL を有効にしつつ、HTTPSのときだけ Rack::SSL のフィルタをかけるようにしている。
config.middleware.insert_before ActionDispatch::Static, Rack::SSL, :exclude => proc { |env| env['HTTPS'] != 'on' }