- 公開日
RailsアプリケーションをLAN内に公開する
普通にrails server
した場合、デフォルトでlocalhost:3000でリッスンするので、LAN(Local Area Network)内の外部のクライアントからローカルIPではアクセスすることができません。
$ rails server
=> Booting WEBrick
=> Rails 4.2.3 application starting in development on http://localhost:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
これをLAN内に公開したい場合はどうするか。下記のようにbinding
のオプションを付けてその値として0.0.0.0
を指定します。
$ rails server --binding=0.0.0.0
=> Booting WEBrick
=> Rails 4.2.3 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
このコマンドを使うことで同じLAN内にいるクライアントからRailsが起動しているマシンのローカルIPをポート番号とともに(例: 192.168.1.xx:3000
)を叩けば、アプリケーションへとアクセス可能になります。
なぜ0.0.0.0?
rails server
コマンドはデフォルトでループバックアドレス、つまりlocalhost(127.0.0.1
)にバインドされます。ループバックアドレスは自分自身を指し示すアドレスなのでなので外部からのアクセスは弾かれます。
常に「自分自身」を指すIPアドレスは、当然ですが、他のコンピュータとの通信などには使えません。
よってデフォルトのrails server
起動コマンドではでは外部からのアクセスは遮断されます。
一方、0.0.0.0
はどうかというと、0.0.0.0
のアドレスには複数の意味があり文脈によって意味が異なっています。今回の場合、ループバックアドレス含む全てのIPアドレスという意味です。ときに0.0.0.0
のアドレスはワイルドカードアドレスと言われることもあります。
システムにおけるすべてのインタフェースのすべてのIPアドレス
本記事で紹介したrails server
のコマンドはbinding
オプションによって0.0.0.0
に明示的にバインドすることにより、外部からのアクセスも許可しています。