Hub*_*kin 14 networking linux virtualbox rails
我在虚拟机上有一个 rails 服务器,我需要从主机访问 localhost。我已经尝试了 NAT(通过端口转发 - 来宾端的端口 80 和 3000)和桥接适配器,但似乎没有任何效果。
在这两种情况下,我都能够访问端口 80,但尝试连接到端口 3000 上的 localhost 失败(因此访问 xampp 服务器没有问题)。
如果您知道如何在服务器位于来宾端时从主机访问 localhost,请告诉我。
我在来宾上有 linux (debian),在主机端有 Windows 7 - 我使用 VirtualBox。
Sam*_*hke 12
这里至少有三个独立的组件在起作用,每个组件都需要正确配置。
当 Rails(或其他服务器应用程序)打开以接收网络连接时,它将绑定到 IP 和端口。如果传入的请求与这两者都不匹配,它将不会接受连接。来自rails server --help:
Run Code Online (Sandbox Code Playgroud)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 主机)访问,您需要告诉 Rails 绑定到 Debian 拥有的可从外部访问的任何 IP 地址(见下文)。
然而,更简单的方法是告诉 Rails 绑定到特殊的 IP 地址0.0.0.0,这意味着任何网络适配器。所以,像这样启动你的 Rails 服务器:
rails server -p 80 -b 0.0.0.0
Run Code Online (Sandbox Code Playgroud)
将使任何可以在网络上看到您的 VM 的人都可以访问您的网站。
即使您让其他两个组件正常工作,这很可能仍然让您感到困惑。
您需要将浏览器指向 Debian 虚拟机,这是它自己的独立计算机。
经验法则localhost是它总是指同一台计算机。但是,出于联网目的,您的 Debian VM 是它自己的独立计算机。如果您在 Windows 7 主机中使用 Web 浏览器,localhost则将始终指的是您的 Windows 7 而不是其他。
您在这里有两个选择:
将 VirtualBox VM 适配器设置为桥接模式(如您在问题中提到的)。这会将您的 Debian 直接放在与 Windows 7 主机相同的外部/家庭/工作网络上。然后,您可以通过运行来确定您的 Debian VM 的 IP ifconfig。查找您eth0或eth<something>适配器的 IP 。将此插入浏览器的地址栏中。
使用 NAT 适配器和VirtualBox 端口转发。海事组织这更复杂。
我已经有一段时间没有在 Debian 上工作了,所以我不知道当前的默认值是什么,但是如果上述两件事不起作用,那么这可能值得研究。如果 Debian 正在运行防火墙,您将需要打开您希望从另一台机器访问的任何端口。
希望这可以帮助 :)
| 归档时间: |
|
| 查看次数: |
4113 次 |
| 最近记录: |