为什么Ruby on Rails使用http://0.0.0.0:3000而不是http://localhost:3000?

44
当我尝试按照官方的Ruby on Rails入门教程时,很快就出了问题。基本上它说:
…转到http://localhost:3000。您应该看到Rails的默认信息页面。
但是当我按照说明操作时,会得到
=> Rails 2.3.4应用程序正在http://0.0.0.0:3000上启动
在尝试这两个地址后,我知道它们指向同一个东西,但是有人能解释一下为什么Ruby on Rails使用http://0.0.0.0:3000而不是http://localhost:3000吗?
是否有一种方法可以始终让WEBrick服务器使用localhost?
7个回答

62

Localhost 的字面含义是 “你的本地主机”,通常由 127.0.0.1 标识,所有发送到该地址的流量都通过环回接口路由。如果您的 Web 服务器正在监听 127.0.0.1 上的连接,则意味着它仅接受来自同一主机的请求。

0.0.0.0 表示 Rails 正在监听 所有 接口,而不仅仅是环回接口。


7
若要设置WEBrick仅监听本地主机,即忽略外部连接:请输入以下命令:script/server --binding=127.0.0.1 - tadman
6
FYI,我在启动WEBrick时将绑定设置为127.0.0.1,这使得我的本地Rails连接(以及外部Web连接)快了很多。因此,如果您的本地连接速度较慢,我建议使用@tadman建议的方法。在Rails 3中,它是rails server --binding=127.0.0.1 - Steph Rose

21

0.0.0.0 表示所有接口,包括 127.0.0.1,也就是所谓的 localhost


2
如果您想使用localhost,一种快速的方法是指定绑定rails s -blocalhost(用-pNNNN指定端口,更多选项请参考rails s --help)。
由于某些原因,我的服务器默认在localhost上运行,需要进一步调查。结果,lvh.me无法正常工作,无法指定子域名(例如:www.lvh.me:3000)。
我通过指定绑定来“解决”这个问题:
rails s -b0.0.0.0 # will work with lvh.me

1
localhost 绑定阻止 lvh.me 工作的原因是 Puma 问题 #782,现在已经修复。更多细节请参见 此处 - tanius

2

提醒大家一下,如果我访问http://localhost:3000/,我的Firefox浏览器可以正确显示本地主机服务器,但是如果我尝试访问由Ruby推荐的http://0.0.0.0:3000/,它就无法显示。很明显,在某种意义上,它们并不等同。

顺便说一下,我在Windows上。


2
“0.0.0.0” 不是一个客户端可以实际访问的 IP 地址。它只是一个系统绑定调用的快捷方式,用于使用 所有 可用的 IP 地址。 - Tobias J

2

Rails 4.1 警告信息。

提醒一下,在 Rails 4.1 上启动时,您将收到以下警告信息:

=> Run `rails server -h` for more startup options
=> Notice: server is listening on all interfaces (0.0.0.0). Consider using 127.0.0.1 (--binding option)

这意味着不建议绑定到0.0.0.0,而应该使用127.0.0.1。在Rails 4.2+中,Rails服务器的默认绑定是localhost,而不是0.0.0.0127.0.0.1

0

对于我们使用Nitrous.io虚拟服务器环境进行开发的人来说,我相信我们必须绑定到0.0.0.0,因为没有本地主机。


0

重启操作系统对我有用。 (在Mac v 10.12上)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接