0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Railsのローカル開発サーバーをngrokで公開する場合に、任意のホストとの通信を許可する

0
Last updated at Posted at 2025-08-01

発生したエラー

ngrokはローカルの開発サーバーをインターネットに外部公開できるサービスです。
localhost:xxxx等をインターネット上に公開できるので非常に便利です。

$ ngrok http (port)で早速以下のように公開することが出来ました。

Forwarding  https://xxxxxx.ngrok-free.app -> http://localhost:xxxx

https://xxxxxx.ngrok-free.appにブラウザからアクセスしてみると、以下のようなエラーが発生します。

スクリーンショット 2025-08-01 9.20.10.png

これは「許可されていないホストなのでアクセスをブロックしましたよ」という内容になっています。
このようになる理由は、Rails6から追加されたDNSリバインディング攻撃を防止するActionDispatch::HostAuthorizationが関係しているようです。

セキュリティ上、許可されていない任意のhost名を持つリクエストはブロックしておきたいということです。

対処法

ngrokの性質上、数時間ごとにURLが入れ替わってしまうため、正規表現を用いてngrokで生成されたURLであるなら何でも許可されるようにします。

以下のコードを開発環境の設定項目として追加します。

# config/environments/development.rb
config.hosts << /[a-z0-9\-]+\.ngrok\-free\.app/

このようにすることで、ngrokが生成したURLが入れ替えられても毎回設定を書き換える必要なく許可をした状態になります。

注意点

ngrokの仕様変更で生成されるURLが変わるケースがあるようです。
以前は「/xxxxxxx.jp.ngrok.io」のように生成されていました。
今後変更された場合は、正規表現を用いて生成される範囲をカバーできるように設定項目に許可を書きましょう。

また、許可する必要がなくなったらきちんと設定項目の中から消しておく必要があります。

なお、これはngrok特定の話ではなく、許可されたホストの通信のみ許可する設定に関するものなので、「任意のホストの通信を用いる場合」というスコープの知識として記事に残しています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?