http://localhost:3000
で立ち上がっているローカル環境のRailsアプリケーションへ、任意のホスト名でアクセスできるようにする方法について紹介します。
今回は例としてhttp://api.local.example-dev.com:3000
でアクセスできるように変更します。
検証環境のバージョンはRails 7.0.1、Ruby 3.1.0です。
目次
任意のホスト名でローカル環境のRailsにアクセスするためにやること
以下の2つを変更する必要があります。
- ローカル環境の『/etc/hosts』を編集する
- Railsの『config/environments/development.rb』を編集する
ローカル環境の『/etc/hosts』を編集する
localhost
は127.0.0.1
を指すホスト名です。
localhost
以外のホスト名をローカル環境で利用する場合はホスト名を127.0.0.1
にマッピングします。
/etc/hosts
# 以下を追加する
127.0.0.1 api.local.example-dev.com
Railsの『config/environments/development.rb』を編集する
Rails 6以降1、DNSリバインディング攻撃からの保護のためデフォルトでは.localhost
、0.0.0.0
、::
からのアクセスのみ許可されています。
ですので、config/environments/development.rb
を編集してリクエストの許可対象にホスト名を追加します。
config/environments/development.rb
Rails.application.configure do
(略)
### 以下を追加
config.hosts << "api.local.example-dev.com"
end
以下のように設定が読み込まれていればOKです。
$ rails c
### "api.local.example-dev.com"が追加されていればOK
> Rails.application.config.hosts
=> [".localhost", #<IPAddr: IPv4:0.0.0.0/0.0.0.0>, #<IPAddr: IPv6:0000:0000:0000:0000:0000:0000:0000:0000/0000:0000:0000:0000:0000:0000:0000:0000>, "api.local.example-dev.com"]
なお、上記の設定をしていない場合、http://api.local.example-dev.com:3000
でRailsアプリケーションにアクセスするとBlocked host: api.local.example-dev.com
というエラーが発生します。
Blocked host
エラーを防ぐには、今回紹介した『ホストをリクエスト許可に追加する方法』以外に『config.hosts.clear
を設定する方法』『ActionDispatch::HostAuthorization middleware
を使わないようにする方法』があります。2
さいごに
Twitter(@nishina555)やってます。フォローしてもらえるとうれしいです!