107

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

如果我让它保持几分钟不动,然后再次重新加载,第一次重新加载(再次)非常缓慢;似乎正在缓存某些东西。

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

我的设置:Apache 2 - MySQL - PHP installed and enabled - 添加了几个虚拟主机,其中一个是我为 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>
4

13 回答 13

186

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

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

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

对我来说就像一个魅力。似乎是狮子的一个错误。

于 2012-04-17T22:26:01.357 回答
93

还有另一个问题 10.7.* 到 10.8.4 以.local导致五秒查找的站点结束。详细信息和解决方案由 Bram Van Damme 的博文提供,可在此处找到

“默认情况下,任何以结尾的主机名.local都被视为 Bonjour 主机,而不是通过查询网络首选项中的 DNS 服务器条目。”</p>

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

::1 mysite.local
fe80::1%lo0 mysite.local
127.0.0.1 mysite.local
于 2013-07-31T23:51:56.220 回答
25

我也遇到了同样的问题,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

突然间,一切又恢复了活力。我的两台机器上都一样。

于 2012-07-26T17:02:22.800 回答
15

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

127.0.0.1 something.local.mydomain.org
::1 something.local.mydomain.org
于 2014-11-10T18:02:41.423 回答
10

确保将 IP v6 条目放在不与 localhost 对齐的行中

::1 localhost

IPv6 条目位于单独的行中

fe80::1%lo0 here and_here

现在有时真的很快,但很少有例外,旧的滞后又回来了。然而,它们可能基于其他原因。

于 2012-08-11T09:57:48.473 回答
7

在 OSX El Capitan 上,对我有用的是在 IPv4 条目的正上方创建一个重复的 IPv6 条目,就像这样

fe80::1%lo0 demo.test.dev
127.0.0.1   demo.test.dev
于 2016-04-23T03:34:33.230 回答
3

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

于 2013-12-04T13:42:11.700 回答
1

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

于 2014-04-08T06:32:33.827 回答
1

注意:我使用的是 Windows 和 XAMPP,但是在研究这个问题时,许多人在 Windows 和 Mac 上遇到了同样的问题。为任何发现此问题的人提供参考答案,因为我花了数小时试图找到适合我的解决方案:

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

迄今为止似乎对我有用的唯一解决方案是所有解决方案的组合:

  • 从 mysite 更改我正在使用的域。本地到 mysite。开发者 受到@Cleverlemming 回答的启发。
  • 包括 IPv6 线路。
  • 删除多余的虚拟主机和主机(我将它们注释掉)。

在我的主机文件中,我的主机目前位于不同的行中,到目前为止,问题似乎已得到解决。

祝任何试图解决此问题的人好运,如果有人有任何信息要添加,请这样做 - 这似乎是一个影响很多人的问题,没有单一的已知原因或解决方案。

于 2015-08-08T09:14:05.570 回答
1

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

例如

127.0.0.1 localhost host1 host2 host3 host4 host5 host1 host6

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

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

于 2016-10-02T23:34:47.427 回答
0

为我做的诀窍是添加

127.0.0.1 locahost

在主机文件的第一行。

在我所有的虚拟主机中,只有使用数据库的主机很慢。我相信这是因为为数据库连接查找“localhost”的过程减慢了速度,因为我只添加了虚拟主机的地址,而不是“localhost”。现在一切又变得活泼起来。:)

于 2013-02-06T17:20:28.923 回答
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
于 2014-02-11T18:00:44.007 回答
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 秒的死亡时间。

于 2020-06-26T06:49:41.200 回答