仮想マシンに Rails サーバーがあり、ホストから localhost にアクセスする必要があります。NAT (ポート転送 - ゲスト側のポート 80 と 3000) とブリッジ アダプターの両方を試しましたが、何も機能しないようです。
どちらの場合もポート 80 にアクセスできましたが、ポート 3000 で localhost に接続しようとして失敗しました (したがって、xampp サーバーへのアクセスには問題はありませんでした)。
サーバーがゲスト側にあるときに、ホストからローカルホストにアクセスする方法をご存知でしたら、お知らせください。
ゲスト側に Linux (Debian)、ホスト側に Windows 7 があり、VirtualBox を使用しています。
答え1
ここでは少なくとも 3 つの個別のコンポーネントが機能しており、それぞれを正しく構成する必要があります。
Railsバインディングアドレス
rails server --help
Rails (または別のサーバー アプリケーション) がネットワーク接続を受信するために開くと、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 を探します。これをブラウザーのアドレス バーに入力します。eth0
eth<something>
NATアダプタを使用してVirtualBox ポート転送私の意見では、これはもっと複雑です。
Debian ファイアウォール
Debian で作業してからしばらく経っているので、現在のデフォルトが何であるかはわかりませんが、上記の 2 つの方法が機能しない場合は、これを調べる価値があるかもしれません。Debian がファイアウォールを実行している場合は、別のマシンからアクセスするポートを開く必要があります。
お役に立てれば :)