无法从主机访问 VM 上的 Ruby 服务器

Can't access Ruby server on VM from host machine

我有一个 VM 设置 运行ning Ubuntu 服务器 14.04。在我的虚拟机中,我创建了以下 Ruby/Sinatra 应用程序:

require 'sinatra'

set :environment, :production
set :bind, '0.0.0.0'

get '/' do
  "Hello World!"
end

当我使用 ruby hello.rb 执行此操作时,我得到以下输出:

[2015-03-09 16:58:34] INFO  WEBrick 1.3.1
[2015-03-09 16:58:34] INFO  ruby 2.1.5 (2014-11-13) [x86_64-linux]
== Sinatra/1.4.5 has taken the stage on 4567 for production with backup from WEBrick
[2015-03-09 16:58:34] INFO  WEBrick::HTTPServer#start: pid=2258 port=4567

一切似乎都正常,但是当我尝试从我的主机 (Windows 8.1) 访问 localhost:4567 时,我收到 GET http://localhost:4567/ net::ERR_CONNECTION_REFUSED 错误(在 Chrome ).

如果我尝试从我的 VM 中访问服务器(例如,通过使用 wget http://localhost:4567),它工作正常。

我的 VM 中也有 Apache2.4 运行ning,它工作正常,但是当我试图通过 运行ning [=17] 访问我的 Ruby 服务器时我禁用了它=].

可能是什么问题? 运行ning 常规 Ruby 文件没有问题,如果我将 Apache2 与 Phusion Passenger 一起使用,我可以访问我的 Ruby/Sinatra 应用程序。但是当我只是 运行 ruby hello.rb 时,我无法从我的主机访问它。

localhost 指的是您的 本地主机 ,在 Windows 的情况下与您的 Ubuntu 实例不同。

您需要直接连接到您的 Ubuntu 实例 IP,无论它是什么。通常你可以用 ip addrifconfig.

找到

如果您需要可以输入浏览器的友好 DNS 名称,xip.io 提供了一个。

如果您使用的是 Vagrant,那么您可以配置端口转发,这样您仍然可以根据需要使用 localhost。如果没有端口转发,您将无法间接连接。

我的 VM 的网络适配器连接到 NAT。我将端口 443、22 和 80 转发到我的 VM,并且在这些端口上访问我的服务器工作正常。由于我是 运行 默认端口 4567 上的 Ruby WEBrick 服务器,我只需要将端口 4567 从我的主机转发到我的虚拟机。

更改后,在我的网络浏览器中输入 http://localhost:4567 即可提供我的 Ruby 文件中的内容。