使用 /etc/hosts 条目联系本地主机上的服务时出现长时间延迟

Cod*_*lan 5 networking osx-lion

我的本地机器上运行着一个 Web 服务器,当我使用localhost地址对它执行cURL 请求时,它执行得非常快。但是,当我添加 /etc/hosts 之类的

127.0.0.1 test.local

然后执行相同的 cURL 请求:

curl -I http://test.local:3002/images/logo.png

它延迟了 2-3 秒。localhost再次将 cURL 请求改回不会产生延迟。

这是每次都可以重现的。

我试过在下面运行慢速请求dtruss,看看是否能找到导致延迟的系统调用。没有什么异常表现出来。

我试过通过netcat它只是返回来制作一个虚拟服务,HTTP/1.0 200 OK所以我可以保证问题不是真的由于我的网络服务器造成的。同样,没有区别:localhost快如您所愿,但会test.local延迟。

在这一点上,我认为存在某种 DNS 问题。也就是说,/etc/hosts不是首先被咨询,也就是说,我的上游 DNS 正在被检查,失败了,然后/etc/hosts正在被咨询,最终有效。

这可能吗?被OS X Lion以某种方式咨询我/etc/hosts的解析器链以后呢?

Cod*_*lan 6

好的,我想通了。我在一篇博文中发现了这个评论:

问题是 Lion 处理 .local TLD 的方式不同,因为它是为某些多播 DNS 功能保留的(由 Bonjour 使用)。我发现解决此问题的唯一方法是为开发主机使用不同的 TLD(即:.dev)。它对我来说很好用,希望它对其他人有帮助!

切换我的开发域以结束.dev工作正常。

tl;dr - 不要.local用于 Lion 中的开发域。


bub*_*ubu 1

OSX lion 有这个已知的错误。在使用 /etc/hosts 条目之前,它会首先咨询 DNS 服务器。这种行为只在 OSX 狮子中发现,在雪豹甚至老虎中都没有发现。

可能的选项:

  • 安装 DNSMasq
  • 等待 macOS 的补丁
  • 暂时使用雪豹

另请参阅http://www.justincarony.com/blog/2011/07/27/mac-os-x-lion-etc-hosts-bugs-and-dns-resolution/了解更多详细信息。那里覆盖得很好。