为啥 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 请求?