如何消除Mac OS X Lion上的localhost / virtualhost缓慢解析/加载(2-3秒的延迟)?


97

自从在Mac OS X Lion(2012年1月购买了全新的macbook air)上设置开发环境以来,我注意到第一次解析到虚拟主机的速度非常慢(大约3秒),但之后的解析速度却最快我会继续定期加载。

如果我在几分钟内保持不变,然后再次重新加载,则第一次重新加载(再次)会非常缓慢。似乎正在缓存某些内容。

如下所示,我没有使用.local TLD。

我的设置:Apache 2-MySQL-已安装并启用PHP-添加了几个虚拟主机,其中一个是我为localhost创建的

我的/ etc / hosts:

127.0.0.1       localhost
255.255.255.255 broadcasthost
::1             localhost
fe80::1%lo0     localhost
127.0.0.1       myproject.dev
::1             myproject.dev
fe80::1%lo0     myproject.dev

我的虚拟主机设置在username.conf中:

NameVirtualHost *:80

<Directory "/Users/myusername/Sites/">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

<VirtualHost *:80>
    ServerName localhost
    DocumentRoot /Users/myusername/Dropbox/dev_envs/
</VirtualHost>
<VirtualHost *:80>
    ServerName myproject.dev
    DocumentRoot /Users/myusername/Dropbox/dev_envs/myprojectname
</VirtualHost>

我找到了这个stackoverflow.com/questions/19313546/…。它对我有用!!!
clark yu 2015年

2
我将其报告为Apple rdar:// 24237290的错误,并得到了这个热闹的答复:>工程部提供了有关此问题的以下反馈:>这是自最大编号以来的预期行为。/ etc / hosts文件中允许的别名数量为10。在/ etc / hosts文件中具有10个以上的别名似乎不切实际。如果更多的人报告此错误并告诉他们此答案是完全荒谬的(并且在任何地方都没有记录),我将非常欢迎。
载重吨

使用.local TLD有什么不好的地方吗?
Yaakov Ainspan '18

在莫哈韦
沙漠

Answers:


169

我遇到了完全相同的问题,这让我发疯了!

将本地主机的所有主机文件条目放入一行,如下所示:

127.0.0.1 localhost myproject.dev myotherproject.dev
::1 localhost
fe80::1%lo0 localhost

对我来说就像一个魅力。好像是Lion中的错误。


我认为@ adam-gries应该可以将其标记为答案。谢谢杰里米!
zysoft

5
该修复程序对我有用,但是我达到了11个站点的限制,此后它开始运行得更慢!现在,我将其分为两个主机条目(具有相同的IP地址),看来一切正常。
Alex Ghiculescu

与@AlexGhiculescu相同的问题和解决方案,但在OS X 10.8 Mountain Lion中。
chrishiestand

2
OS X 10.9仍然是一个问题,它让我发疯了几个小时!太棒了,感谢您的出色回答!
robertp

2
这仅适用,因为您是在其他localhost设备路由之前输入主机条目。如果您的Web服务器正在查看127.0.0.1,则这些主机需要位于/ etc / hosts文件的HEAD处才能进行快速查找。我有几十行127.0.0.1行,只有当我将它们移至/ etc / hosts文件的TOP时,它们才能为我快速解决。
Joey T

70

对于以“ .local”结尾的网站,还有一个10.7。*到10.8.4的问题,这会导致五秒钟的查找。详细信息和解决方案由Bram(us)Van Damme提供,位于以下链接:

http://www.bram.us/2011/12/12/mamp-pro-slow-name-resolving-with-local-vhosts-in-lion-fix/

“默认情况下,任何以.local结尾的主机名都被视为Bonjour主机,而不是通过查询“网络”偏好设置中的DNS服务器条目。

要解决此问题(无需重命名每个虚拟主机),您需要在/ etc / hosts文件中为每个虚拟主机添加IPv6条目:“

::1 mysite.local
fe80::1%lo0 mysite.local
127.0.0.1 mysite.local

这也会影响Windows系统。解决方案在这里也像魅力一样。
ToBe 2014年

将主机指向本地VM时,我一直遇到此问题。我使用了VM中的IPV6地址,使主机文件保持了良好的格式(在自己的行上输入等),并添加了其他条目,所有延迟问题都消失了。我似乎只碰到了结尾为的网站.local,并且添加了两个IPV4 / 6条目已经为我解决了所有问题(OS X 10.9)
Justin

之所以不得不与之抗争,是因为我在“共享”首选项窗格中的主机名与我在/ etc / hosts中输入的主机名不匹配,以防万一它对任何人
都有

哇。我知道这 ::1是的IPv6快捷方式127.0.0.1。但是什么fe80::1%lo0意思呢?-啊,在superuser.com/questions/241642/…
AlexChaffee

在macOS Sierra上这行得通,但我必须删除第一行。
布莱斯·约克

24

我在Lion上也遇到了同样的问题。

奇怪的是,我的解决方案与杰里米的方案相反。我在/ etc / hosts的一行上有一大堆someproject.dev条目。第一次在其中任何一个上加载网站都花了很长时间,例如大约一分钟。如果我在5秒钟左右的时间内再次使用它,它的速度非常快,但是要长得多,而且又需要一分钟。我曾经怀疑过各种各样的事情,包括mysql连接,Ruby版本,Rails错误,Apache,Phusion Passenger。直到我最终查看控制台并意识到正在尝试DNS查找。

因此,我将它们全部放在单独的行上:

127.0.0.1 localhost

127.0.0.1 myproject.dev

127.0.0.1 myotherproject.dev

突然,一切又变得活泼起来。两台机器上都一样。


在stackoverflow中尝试了任何方法,但这和user902664的帖子有所帮助。所有IPv4和IPv6线必须在一条线上。如果仅在分隔线上使用IPv4条目,则从30秒减少到〜1,同时在分隔线上将IPv6设置与〜0.5秒一起使用。
tomis 2013年

这似乎是一个疯狂的错误。我输入了一个带有14个别名的地址192.168.56.3。删除一个别名,您可以在不到1秒的时间内解析主机。使用第14个别名,它会在大约30秒内解决列表中的前几项...
Brian M. Carr

这是OSX独有的bug吗?任何人都可以链接到错误报告吗?
2014年

仅仅花了几个小时就比我想了解的更多地了解网络配置。我正要尝试并设置本地DNS服务器,然后对其进行修复。谢谢。小牛10.9.5在这里。
clumsyfingers '16

13

为IPv6 :: 1指定相同的主机对我有所帮助。

127.0.0.1 something.local.mydomain.org
::1 something.local.mydomain.org

是的,每行一个域。
warvariuc

1
这为我解决了这个问题。至少就我而言,每行不需要一个域。
jeff-h

9

确保将IP v6条目与本地主机不在同一行

::1 localhost

IP v6条目放在单独的行中

fe80::1%lo0 here and_here

现在有时候确实非常快,但是有一些罕见的例外情况,那就是旧时的滞后现象会重新出现。但是,它们可能基于其他原因。


1
这在OS X 10.11.6上对我有用-当我将localhost IPv4条目(单行表示127.0.0.1)复制到具有相同别名的:: 1行时,查找就从4-5秒缩短到了即时。我也有一个127.0.0.2条目,我将其复制为:: 2。我每个地址只有一行。谢谢!
RichVel

7

在OSX El Capitan上,对我有用的是像在IPv4条目上方一样制作一个重复的IPv6条目,如下所示

fe80::1%lo0 demo.test.dev
127.0.0.1   demo.test.dev

同意,只要别名列表相同,就可以使用高于或低于IPv4的IPv6条目。
RichVel

这是荒谬的,但解决了我在Chrome上真正解决我的laradock Docker容器的localhost链接的速度很慢的问题(Safari一直很好)
jeff-h

对于高塞拉利昂工程,以及-火狐,有或没有它的Safari工作
克里斯阿桑娜希雅

3

确保在文件开头定义了主机名,这对我来说很重要。默认情况下,行127.0.0.1 localhost已在开头,只需将您的条目添加到同一行即可。


这是真正的解决方案,所有其他内容都尝试过,并且与一条线上的所有引用或链接到IPv6路由无关(除非这是您在apache conf中的主要路由...)谢谢@Erik!
Joey T

而且对我来说,这比2到3秒要多得多,更像是10至20秒。我有很多127.0.0.1条目,但所有条目都在OS X默认的localhost配置之后列出。如果这很重要,我也使用Lion,而不是ML。
Joey T

可悲的是,这与Mavericks不再有效-将我的投票留给Lion,尽管它工作得很好,直到几个月前我升级到了Mavs。
乔伊·T

1

我遇到了同样的问题,发现这是由在我的LAN上启用IPv6引起的,但是在网络和ISP之间没有正确配置IPv6。显然,当同时给客户端和客户端两个客户端时,IPv6 DNS服务器优先于IPv4 DNS。客户端花了几秒钟时间(每次尝试),发现IPv6 DNS无法访问或丢失,然后又退回到IPv4 DNS。


1

注意:我正在使用Windows和XAMPP,但是在研究问题时,许多人在Windows和Mac上也遇到了相同的问题。对于任何发现此问题的人,作为参考,我已经花费了数小时试图找到适合我的解决方案:

我已经针对同一问题尝试了许多解决方案,包括将所有主机放在一条线上,删除冗余主机和虚拟主机,还包括IPv6线路- 这些一项都不成功。

到目前为止,对我来说唯一有效的解决方案是所有解决方案的组合:

  • 从mysite更改我正在使用的域。我的网站本地开发人员。受到@Cleverlemming答案的启发
  • 包括IPv6线。
  • 删除冗余的虚拟主机和主机(我已将它们注释掉)。

在我的主机文件中,我的主机当前位于单独的行上,到目前为止,该问题似乎已解决。

祝所有尝试解决此问题的人好运,如果有人有任何补充信息,请这样做-这似乎是一个困扰许多人的问题,没有任何已知的原因或解决方案。


1

我遇到了同样的问题,最终意识到我在同一行上有两次相同的主机条目:

例如

127.0.0.1 localhost host1 host2 host3 host4 host5 host1 host6

我删除了同一台主机的第二个实例(在上面的示例中为host1),然后事情立即加速了。

当我发现这一点时感到有点傻,但是当您在同一行上有10个长主机名并且您频繁添加/删除时,它很容易被忽略。


0

对我有用的窍门是添加

127.0.0.1 locahost

在主机文件的第一行。

在我所有的虚拟主机中,只有使用数据库的虚拟主机运行缓慢。我相信这是因为查找“ localhost”以进行数据库连接的过程使事情变慢了,因为我只添加了虚拟主机的地址,而不是“ localhost”。现在一切都变得活泼了。:)


我在那里有两个localhost的定义。看起来确实更好。
亚伦·布里克

0

我也碰到了这么多。我有一堆在两行中定义的虚拟主机,一个用于IPv4,一个用于IPv6。移动我试图解决的主机以使其成为列表中的第一名加快了它的速度。

127.0.0.1 faster.example.dev host1.example.dev host2.example.dev host3.example.dev host4.example.dev host5.example.dev host6.example.dev
::1 faster.example.dev host1.example.dev host2.example.dev host3.example.dev host4.example.dev host5.example.dev host6.example.dev

0

一个愚蠢的问题使我浪费了一些时间:应用@Cleverlemming的答案后,我发现主机文件中存在重复的条目。就像是:

::1          site1.local site2.local site1.local site3.local site4.local
fe80::1%lo0  site1.local site2.local site1.local site3.local site4.local
127.0.0.1    site1.local site2.local site1.local site3.local site4.local

然后,针对site3.local和site4.local的IP解析将花费这5秒的时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.