/etc/hosts 中条目的 DNS 解析延迟

/etc/hosts 中条目的 DNS 解析延迟

为了进行 Web 开发,我在我的 中指定了几个域名/etc/hosts。这些域名代表在本地运行的几个不同的网站。

127.0.0.1    site1.local
127.0.0.1    site2.local
127.0.0.1    site3.local

一切正常,但我发现从这些域加载页面时会有 5 秒的延迟。浏览器开发人员工具将此延迟归因于 DNS,并且延迟时间始终恰好为 5 秒。

奇怪的是,这也只发生在 Chrome 和 Firefox 中。Safari 完全没有延迟。

我认为浏览器可能在返回到 hosts 文件之前查询了正常的 DNS 服务器。执行 DNS 查询没有dig site1.local返回任何结果(正如您所期望的那样),但返回结果的速度非常快(17 毫秒),因此情况似乎并非如此。

是什么原因导致在文件中查找主机时出现 5 秒延迟/etc/hosts,以及如何减少或消除这种延迟?

答案1

访问以 结尾的主机名时出现 5 秒延迟.local是由于 Bonjour 造成的,并进行了解释在这个关于 Stack Overflow 上另一个问题的回答中

我能够使用该答案中建议的解决方法,为每个服务器添加一个 IPv6 条目,从而避免 5 秒的延迟。不清楚为什么添加 IPv4 和 IPv6 条目会导致避免 Bonjour,但它确实有效。

127.0.0.1    site1.local
127.0.0.1    site2.local
127.0.0.1    site3.local
::1    site1.local
::1    site2.local
::1    site3.local

答案2

如果您正在使用 Apache,那么 Apache 很可能正在挂起对您本地开发站点主机名的 DNS 查找。

“我认为浏览器可能在回退到 hosts 文件之前查询了正常的 DNS 服务器。执行 DNS 查询没有dig site1.local返回任何结果(正如您所预料的那样),但返回结果的速度非常快(17 毫秒),因此情况似乎并非如此。”

在我看来,这听起来像是网络问题,延迟似乎是与 DNS 查找相关的问题。Apache 正在尝试解析site1.localsite2.local和的主机名site3.local,由于 DNS 查找这些主机名失败而挂起。然后,当 Apache 最终放弃并获取文件时/etc/hosts/,网站终于加载了。

我更详细地我对这里另一个问题的回答,但HostnameLookups对于 Apache 来说基本上是一个缓慢的过程,当它成为 Apache 配置指令的一部分时,HostnameLookups会打开即使在其他地方被禁用。因此它确实可以解决localhost并且只是挂起并挂起。

Allow这解决了使用/指令的 Apache 服务器上的许多“神秘”挂起问题Deny

相关内容