CubicLouve

Spring_MTの技術ブログ

Railsのforce_sslとssl_optionsについて

Railsforce_sslssl_options について知らないことが多かったのでまとめてみます。

railsguides.jp

force_ssl

force_ssl を有効にすると、ActionDispatch::SSLミドルウェアとして差し込まれます。

rails/default_middleware_stack.rb at 5394c94a2b8fa3b24893f00b2fc20d6554bf31c9 · rails/rails · GitHub

これにより、 全てのリクエストにHTTPSプロトコルが強制されます。

ちなみに、ActionDispatch::SSL はその他にも色々やってくれます。

  • HTTPからHTTPSへのリダイレクト
  • HSTSの設定
  • CookieにSecure属性をつける

rails/ssl.rb at 5394c94a2b8fa3b24893f00b2fc20d6554bf31c9 · rails/rails · GitHub

で、内部だけで使うヘルスチェックとかのエンドポイントに対してHTTPS強制されるとそれはそれで面倒です。

それを回避するために、ssl_options を使います。

ssl_options

ActionDispatch::SSL

ssl_options の中の redirect の設定の中で、HTTP => HTTPSのリダイレクトの対象から除外する exclude オプションがあります。

上記のページにもありますが、ヘルスチェックなどのパスを除外することができます。

config.ssl_options = { redirect: { exclude: -> request { request.path =~ /healthcheck/ } } }

他にもHSTSやCookieのSecure属性に対するオプションもあります。

参考

『プロフェッショナルSSL/TLS』www.lambdanote.com