我在虚拟机上有一个Rails服务器,我需要从主机访问localhost。我已经尝试了NAT(通过端口转发-来宾端的端口80和3000)和桥接适配器,但是似乎没有任何作用。
在这两种情况下,我都能够访问端口80,但尝试在端口3000上连接到localhost失败(因此,访问xampp服务器没有问题)。
如果您有任何想法,请问我如何在服务器位于来宾端时从主机访问本地主机。
我在来宾系统上有linux(debian),在主机端有Windows 7-我使用VirtualBox。
我在虚拟机上有一个Rails服务器,我需要从主机访问localhost。我已经尝试了NAT(通过端口转发-来宾端的端口80和3000)和桥接适配器,但是似乎没有任何作用。
在这两种情况下,我都能够访问端口80,但尝试在端口3000上连接到localhost失败(因此,访问xampp服务器没有问题)。
如果您有任何想法,请问我如何在服务器位于来宾端时从主机访问本地主机。
我在来宾系统上有linux(debian),在主机端有Windows 7-我使用VirtualBox。
Answers:
这里至少有三个独立的组件在起作用,每个组件都需要正确配置。
当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的人都可以访问您的网站。
即使您使其他两个组件正常工作,这也可能使您感到困惑。
您需要将浏览器指向Debian虚拟机,这是它自己的独立计算机。
经验法则localhost
是,它始终指的是同一台计算机。但是,出于联网目的,您的Debian VM是其自己的独立计算机。如果您在Windows 7主机中使用Web浏览器,localhost
则将始终引用Windows 7,仅此而已。
您在这里有两个选择:
将VirtualBox VM适配器设置为Bridge模式(如您在问题中所述)。这样会将您的Debian与Windows 7主机直接置于同一外部/家庭/工作网络上。然后,您可以通过运行来确定Debian VM的IP ifconfig
。查找您eth0
或eth<something>
适配器的IP 。将其插入浏览器的地址栏中。
使用NAT适配器和VirtualBox端口转发。IMO这更复杂。
自从我从事Debian工作以来已经有一段时间了,所以我不知道当前的默认值是什么,但是如果以上两项都不起作用,那么可能值得研究。如果Debian正在运行防火墙,则需要打开希望从另一台机器访问的所有端口。
希望这可以帮助 :)