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


12

我在虚拟机上有一个Rails服务器,我需要从主机访问localhost。我已经尝试了NAT(通过端口转发-来宾端的端口80和3000)和桥接适配器,但是似乎没有任何作用。

在这两种情况下,我都能够访问端口80,但尝试在端口3000上连接到localhost失败(因此,访问xampp服务器没有问题)。

如果您有任何想法,请问我如何在服务器位于来宾端时从主机访问本地主机。

我在来宾系统上有linux(debian),在主机端有Windows 7-我使用VirtualBox。

Answers:


10

这里至少有三个独立的组件在起作用,每个组件都需要正确配置。

Rails绑定地址

当Rails(或另一个服务器应用程序)打开以接收网络连接时,它将绑定到IP和端口。如果传入请求与这两个请求都不匹配,则它将不接受连接。来自rails server --help

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本身:对于测试而言是良好且安全的,但对于生产甚至从另一台计算机进行测试都没有用。

如果希望从任何其他计算机(包括Windows 7主机)访问Rails,则需要告诉Rails绑定到Debian拥有的可从外部访问的IP地址(请参见下文)。

但是,一种更简单的方法是告诉Rails绑定到特殊的IP地址0.0.0.0,这意味着任何网络适配器。因此,像这样启动您的Rails服务器:

rails server -p 80 -b 0.0.0.0

将使任何可以在网络上看到您的VM的人都可以访问您的网站。

即使您使其他两个组件正常工作,这也可能使您感到困惑。

虚拟机IP地址

您需要将浏览器指向Debian虚拟机,这是它自己的独立计算机。

经验法则localhost是,它始终指的是同一台计算机。但是,出于联网目的,您的Debian VM是其自己的独立计算机。如果您在Windows 7主机中使用Web浏览器,localhost则将始终引用Windows 7,仅此而已。

您在这里有两个选择:

  • 将VirtualBox VM适配器设置为Bridge模式(如您在问题中所述)。这样会将您的Debian与Windows 7主机直接置于同一外部/家庭/工作网络上。然后,您可以通过运行来确定Debian VM的IP ifconfig。查找您eth0eth<something>适配器的IP 。将其插入浏览器的地址栏中。

  • 使用NAT适配器和VirtualBox端口转发。IMO这更复杂。

Debian防火墙

自从我从事Debian工作以来已经有一段时间了,所以我不知道当前的默认值是什么,但是如果以上两项都不起作用,那么可能值得研究。如果Debian正在运行防火墙,则需要打开希望从另一台机器访问的所有端口。

希望这可以帮助 :)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.