无法从主机访问 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 addr
或 ifconfig
.
找到
如果您需要可以输入浏览器的友好 DNS 名称,xip.io 提供了一个。
如果您使用的是 Vagrant,那么您可以配置端口转发,这样您仍然可以根据需要使用 localhost
。如果没有端口转发,您将无法间接连接。
我的 VM 的网络适配器连接到 NAT。我将端口 443、22 和 80 转发到我的 VM,并且在这些端口上访问我的服务器工作正常。由于我是 运行 默认端口 4567 上的 Ruby WEBrick 服务器,我只需要将端口 4567 从我的主机转发到我的虚拟机。
更改后,在我的网络浏览器中输入 http://localhost:4567
即可提供我的 Ruby 文件中的内容。
我有一个 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 addr
或 ifconfig
.
如果您需要可以输入浏览器的友好 DNS 名称,xip.io 提供了一个。
如果您使用的是 Vagrant,那么您可以配置端口转发,这样您仍然可以根据需要使用 localhost
。如果没有端口转发,您将无法间接连接。
我的 VM 的网络适配器连接到 NAT。我将端口 443、22 和 80 转发到我的 VM,并且在这些端口上访问我的服务器工作正常。由于我是 运行 默认端口 4567 上的 Ruby WEBrick 服务器,我只需要将端口 4567 从我的主机转发到我的虚拟机。
更改后,在我的网络浏览器中输入 http://localhost:4567
即可提供我的 Ruby 文件中的内容。