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

Posted

技术标签:

【中文标题】为啥 Ruby on Rails 使用 http://0.0.0.0:3000 而不是 http://localhost:3000?【英文标题】:Why does Ruby on Rails use http://0.0.0.0:3000 instead of http://localhost:3000?为什么 Ruby on Rails 使用 http://0.0.0.0:3000 而不是 http://localhost:3000? 【发布时间】:2010-12-01 12:20:18 【问题描述】:

我是 Ruby on Rails 的新手,所以当我尝试遵循官方的“Getting Started”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?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

设置WEBrick只监听本地主机,这意味着外部连接被忽略:script/server --binding=127.0.0.1 仅供参考,在为我启动 WEBrick 时指定绑定到 127.0.0.1 使我的本地 Rails 连接(以及外部 Web 连接)更快。因此,如果您的本地连接速度很慢,我推荐@tadman 的建议。在 Rails 3 中,它是 rails server --binding=127.0.0.1【参考方案2】:

0.0.0.0 表示所有接口。包括127.0.0.1 又名localhost

【讨论】:

【参考方案3】:

大家都知道,如果我访问,我的 Firefox 浏览器会正确显示本地托管的服务器 http://localhost:3000/ 但是当我尝试访问时它不显示 http://0.0.0.0:3000/ 正如 Ruby 所推荐的那样。显然,在某种意义上,它们是不等价的。

顺便说一句,我在 Windows 上。

【讨论】:

0.0.0.0 不是您可以使用客户端实际访问的 IP 地址。这只是系统绑定调用使用所有可用IP地址的快捷方式。【参考方案4】:

如果你想要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

【讨论】:

localhost 绑定阻止 lvh.me 工作的原因是 Puma 问题 #782,现已修复。更多详情here.【参考方案5】:

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.0 甚至 127.0.0.1

【讨论】:

【参考方案6】:

实际上,rails 有不同的配置选项来判断它是否监听特定接口或所有接口。

【讨论】:

【参考方案7】:

对于我们这些使用 Nitrous.io 虚拟服务器环境进行开发的人,我认为我们必须绑定到 0.0.0.0,因为本身没有 localhost。

【讨论】:

【参考方案8】:

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

【讨论】:

以上是关于为啥 Ruby on Rails 使用 http://0.0.0.0:3000 而不是 http://localhost:3000?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的链接不适用于我的 ruby​​ on rails 网站?单击时链接保持在同一页面上

为啥 Ruby on Rails 的 URL Helper 在我的 URL 中加上句点?

为啥 Ruby on Rails 的 Enumerable 显示计数为 3 但“.each”仅打印出项目 1 次

如何使用 Ruby on Rails 发出 HTTP 请求?

如何使用 Ruby on Rails 发出 HTTP 请求?

ruby on rails如何安装