ホストから VM 上の Rails サーバーにアクセスできない

ホストから VM 上の Rails サーバーにアクセスできない

仮想マシンに Rails サーバーがあり、ホストから localhost にアクセスする必要があります。NAT (ポート転送 - ゲスト側のポート 80 と 3000) とブリッジ アダプターの両方を試しましたが、何も機能しないようです。

どちらの場合もポート 80 にアクセスできましたが、ポート 3000 で localhost に接続しようとして失敗しました (したがって、xampp サーバーへのアクセスには問題はありませんでした)。

サーバーがゲスト側にあるときに、ホストからローカルホストにアクセスする方法をご存知でしたら、お知らせください。

ゲスト側に Linux (Debian)、ホスト側に Windows 7 があり、VirtualBox を使用しています。

答え1

ここでは少なくとも 3 つの個別のコンポーネントが機能しており、それぞれを正しく構成する必要があります。

Railsバインディングアドレス

rails server --helpRails (または別のサーバー アプリケーション) がネットワーク接続を受信するために開くと、IP とポートの両方にバインドされます。着信リクエストがこれら両方に一致しない場合は、接続は受け入れられません。

Usage: rails server [mongrel, thin etc] [options]
-p, --port=port                  Runs Rails on the specified port.
                                 Default: 3000
-b, --binding=IP                 Binds Rails to the specified IP.
                                 Default: localhost
...

したがって、デフォルトでは、Rails はlocalhost(ループバック) ネットワーク アダプタ ( と呼ばれますlo) に送信されたリクエストのみを受け入れます。このアダプタは同じコンピュータ内からのみアクセス可能なので、受け入れられるリクエストは Debian VM 自体からのものだけになります。これはテストには適しており安全ですが、本番環境や別のコンピュータからのテストには役立ちません。

Rails を他のコンピュータ (Windows 7 ホストを含​​む) からアクセスできるようにするには、外部からアクセス可能な Debian の IP アドレスにバインドするように Rails に指示する必要があります (以下を参照)。

しかし、もっと簡単な方法は、Railsに特別なIPアドレスにバインドするように指示することです0.0.0.0。つまり、任意のネットワークアダプタ. Rails サーバーを次のように起動します。

rails server -p 80 -b 0.0.0.0

ネットワーク上で VM を見ることができるすべてのユーザーが Web サイトにアクセスできるようになります。

他の 2 つのコンポーネントが動作していたとしても、これがまだ問題の原因となっている可能性があります。

VM IP アドレス

ブラウザを、独自の独立したコンピュータである Debian 仮想マシンに向ける必要があります。

経験則では、localhostは常に同じコンピューターを参照します。ただし、ネットワークの目的上、Debian VM は独自の別のコンピューターです。Windows 7 ホストで Web ブラウザーを使用している場合、 はlocalhost常に Windows 7 を参照し、他のものは参照しません。

ここでは 2 つのオプションがあります。

  • VirtualBox VM アダプターをブリッジ モードに設定します (質問で述べたとおり)。これにより、Debian が Windows 7 ホストと同じ外部/自宅/職場ネットワークに直接配置されます。その後、 を実行して Debian VM の IP を特定できます。またはアダプターifconfigの IP を探します。これをブラウザーのアドレス バーに入力します。eth0eth<something>

  • NATアダプタを使用してVirtualBox ポート転送私の意見では、これはもっと複雑です。

Debian ファイアウォール

Debian で作業してからしばらく経っているので、現在のデフォルトが何であるかはわかりませんが、上記の 2 つの方法が機能しない場合は、これを調べる価値があるかもしれません。Debian がファイアウォールを実行している場合は、別のマシンからアクセスするポートを開く必要があります。

お役に立てれば :)

関連情報