RailsのBlocked hostというエラーの解決方法

プログラミング
2019年10月20日 10:00

概要

Rails 6.0でWebアプリケーションの開発をしていると、Blocked host: *****というエラーが発生するようになりました。

ここでは、このエラーの解決方法を紹介します。

環境

  • Rails 6.0.0

エラー内容

エラーの内容は次のとおりです。

Blocked host: *****
To allow requests to *****, add the following to your environment configuration:

一部、ホスト名が表示されているところがあるのですが、それらはセキュリティのために伏せてあります。

エラーは、Railsで作成したWebAPIのテストをRailsのサーバとは別のサーバから行っていたときに発生しました。

原因

エラーの原因は、Rails 6.0からの仕様変更のようです。

Rails 6.0からは、DNS Rebuilding Attackという攻撃から守るために、指定されたホストからしかアクセスを受けつない仕様になりました。
localhostなどのいくつかのホスト名については、最初から登録されているためブロックされるわけではないですが、私が行ったように登録されていないホスト名を使ってのアクセスは、ブロックします。

この設定は、Rails 6.0ではdevelopment環境だけで有効になります。
そのため、production環境などでは、そもそもこのようなエラーは発生しません。

解決方法

解決方法は、アクセスを受け付けるホスト名のリストにアクセスしたいホスト名を登録します。

登録は、Railsのconfig/application.rbで行います。

次のような内容をApplicationクラスに記述します。

config.hosts << 'example.com'

# もし、サブドメイン全てを許可する場合は.を使います
config.hosts << '.example.com'

例としてexample.comでアクセスする設定を追加しています。

設定を記述したら、Railsのサーバを再起動して設定を反映させます。

これで、指定したホスト名でアクセスできるようになります。

さいごに

Railsはバージョンアップの度に破壊的な変更が多いと聞きます。

今回のエラーもまさかというところで発生したので、びっくりしました。