Help us understand the problem. What is going on with this article?

Rails6の本番環境でBlocked hostエラーが発生したときの対処法

結論

下記のいずれかでエラーを回避できます。

※ひとまずエラーを回避するための方法として記載しておりますが、これがベストな対処法かは判断し兼ねます。対応は自己責任でお願いいたします。

エラー回避策①

config/environments/development.rbに下記を記載し、ホワイトリストに許可したいhostを追加する。

config/environments/development.rb
Rails.application.configure do
(中略)
  config.hosts << "<許可したいホスト名>"
(中略)
end

後述するエラーメッセージにしたがった方法です。
今回の私の場合、config.hosts << "thawing-caverns-37676.herokuapp.com"を記載しました。

エラー回避策②

同じくconfig/environments/development.rbに下記を記載し、ホワイトリスト全体をクリアする。
これにより、すべてのホスト名に対するリクエストを通過させることができる。

config/environments/development.rb
Rails.application.configure do
(中略)
  config.hosts.clear
(中略)
end

ただし、せっかくRails6で追加された保護機能を無効化してしまうため、推奨は①のような気がします。

発生したエラー

Rails6で開発した環境をherokuへプッシュしてアクセスしようとしたところ、下記のようなエラーが発生した。

スクリーンショット 2019-10-21 12.15.27.png

Blocked host: thawing-caverns-37676.herokuapp.com
To allow requests to thawing-caverns-37676.herokuapp.com, add the following to your environment configuration:
config.hosts << "thawing-caverns-37676.herokuapp.com"

※thawing-caverns-37676.herokuapp.comはherokuのアプリ名

原因

調べてみると、Rails6へのアップデート時の変更点の一つである
DNSリバインディング攻撃からの保護
という機能が原因のようです(Railsガイド〜Ruby on Rails 6.0 リリースノート〜参照)。

上記機能のPull Requestによると、攻撃を保護するためのActionDispatch::HostAuthorizationという新しいミドルウェアが導入されたことにより、許可するホストは自分で設定しなくてはならなくなったようです。
(デフォルトでは0.0.0.0、::、およびlocalhostからのリクエストを許可)

まとめ

対処法として、config/environments/development.rbに下記のいずれかを記載する。

対処法① ホワイトリストに許可したいhostを追加

config.hosts << "<許可したいホスト名>"

対処法② ホワイトリスト全体をクリア

`config.hosts.clear`

参考

https://www.fngtps.com/2019/rails6-blocked-host/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした