Railsのforce_sslとssl_optionsについて
Railsの force_ssl
と ssl_options
について知らないことが多かったのでまとめてみます。
force_ssl
force_ssl
を有効にすると、ActionDispatch::SSL
がミドルウェアとして差し込まれます。
rails/default_middleware_stack.rb at 5394c94a2b8fa3b24893f00b2fc20d6554bf31c9 · rails/rails · GitHub
これにより、 全てのリクエストにHTTPSプロトコルが強制されます。
ちなみに、ActionDispatch::SSL
はその他にも色々やってくれます。
rails/ssl.rb at 5394c94a2b8fa3b24893f00b2fc20d6554bf31c9 · rails/rails · GitHub
で、内部だけで使うヘルスチェックとかのエンドポイントに対してHTTPS強制されるとそれはそれで面倒です。
それを回避するために、ssl_options
を使います。
ssl_options
ssl_options
の中の redirect
の設定の中で、HTTP => HTTPSのリダイレクトの対象から除外する exclude
オプションがあります。
上記のページにもありますが、ヘルスチェックなどのパスを除外することができます。
config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }
他にもHSTSやCookieのSecure属性に対するオプションもあります。