2021-11-08 HSTS / Rails HSTS 設定 / force_ssl のリダイレクト除外
Strict-Transport-Security - HTTP | MDN
HTTP の Strict-Transport-Security レスポンスヘッダー (しばしば HSTS と略されます) は、ウェブサイトがブラウザーに HTTP の代わりに HTTPS を用いて通信を行うよう指示するためのものです。
max-age=<expire-time>
秒単位で、そのサイトに HTTPS だけで接続することをブラウザーが記憶する時間です。
includeSubDomains 省略可
省略可能で、この引数が指定されると、この規則がサイトのすべてのサブドメインにも適用されます。
preload 省略可
詳しくは Strict Transport Security のプリロード を参照してください。仕様書で定義されているものではありません。
Rails HSTS 設定
Railsでも HSTS の設定が可能。このへんのHSTSまわりの設定はどうやら Rails 5 でが追加された模様。
config.ssl_options = { hsts: { preload: true } }
Rails 5 adds more control to fine tuning SSL usage | BigBinary Blog
Rails の force_ssl のリダイレクト除外
Railsでforce_ssl=true
にするとすべてのアクセスが https へとリダイレクトされてしまうが、SSLアクセラレーション効かせたロードバランサーの配下のサーバーへのヘルスチェック時に不便となる。
よって一部のヘルスチェックパスを除外する必要があるが、下記の通り exclude
オプションを付与することで自動redirectを除外することができる。
TLS redirect: Permanently redirects http:// requests to https:// with the same URL host, path, etc. Enabled by default. Set config.ssl_options to modify the destination URL (e.g. redirect: { host: “secure.widgets.com”, port: 8080 }), or set redirect: false to disable this feature.
Requests can opt-out of redirection with exclude:
config.ssl_options = { redirect: { exclude: -> request { /healthcheck/.match?(request.path) } } }
Cookies will not be flagged as secure for excluded requests.