4
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Rails 6 のAPI を叩いたら "Blocked host: host.docker.internal" と怒られた

構成

  • Docker
  • Rails 6 (APIモード)
  • Nuxt.js

エラーになった

Nuxt 側から Axios でRails のAPIを呼び出すぞ!
と今までと同じように以下の設定をしたけど

/.env
API_BASE_URL=http://host.docker.internal:8000
nuxt.config.js
  axios: {
    baseURL: process.env.API_BASE_URL
  },

こんなエラーが出てしまった🤔

image.png

Blocked host: host.docker.internal

To allow requests to host.docker.internal, add the following to your environment configuration:

config.hosts << "host.docker.internal"

解決法

色合い的に Railsのエラーっぽいなーと調べると、
Rails 6 で新たに追加された ActionDispatch::HostAuthorization というミドルウェアで、
許可していないホスト名宛のアクセスは拒否されるようになったみたい。
0.0.0.0localhost はデフォルトで許可されている)

Guard against DNS rebinding attacks by permitting hosts
https://github.com/rails/rails/pull/33145

エラーメッセージの通り、 config に config.hosts を追記して解決!

config/environments/development.rb
Rails.application.configure do
...
    config.hosts << "host.docker.internal"
end

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
4
Help us understand the problem. What are the problem?