自从升级到 Mac OS X Lion(从 Snow Leopard 升级)以来,我注意到解析虚拟主机非常慢(大约 3 秒)。我发现了许多可能解决此问题的技巧(例如,不使用 .local TLD),但它们不适用于我的设置。
我的设置非常简单: - Apache 2(随 Lion 一起提供) - 启用 PHP - 添加了一些虚拟主机 - 安装了 Mail 和 SMTP Pear 包
Apache 的 hosts 文件如下所示:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
127.0.0.1 tbi.dev
127.0.0.1 www.tbi.dev
127.0.0.1 test1.tbi.dev
127.0.0.1 test2.tbi.dev
127.0.0.1 psa.dev
127.0.0.1 snd.dev
Apache 的虚拟主机文件如下所示:
<VirtualHost *:80>
DocumentRoot "/Users/Bart/Sites/tbi"
ServerName tbi.dev
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/Users/Bart/Sites/tbi"
ServerName tbi.dev
ServerAlias *.tbi.dev www.tbi.dev
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/Users/Bart/Sites/psa"
ServerName psa.dev
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/Users/Bart/Sites/sandbox"
ServerName snd.dev
</VirtualHost>
该设置与我在 Snow Leopard 上的设置基本相同,但 Apache 解析虚拟主机的性能明显不同。我运行的是 Mac OS X Lion 10.7.2,但运行 10.7.1 时就已经存在此问题。
这看起来像是一个小问题,但当您每天访问虚拟主机几百次时,就可以想象这会浪费大量时间。
答案1
较长的 DNS 超时几乎总是 IPv6 问题的征兆。
您需要 IPv6 连接到 Apache 吗?
如果没有,我建议改变
<VirtualHost *:80>
进入
<VirtualHost 0.0.0.0:80>
或者完全禁用 IPv6 连接。
答案2
我刚才也遇到了这个问题。
这会将网络配置中的 IPv6 设置为关闭...
# list all network interfaces to get their names
networksetup -listallnetworkservices
# disable the one you want, in my case it's WiFi
networksetup -setv6off Wi-Fi
但不幸的是,这并没有解决我的 DNS 解析问题(也许在系统重启后)。真正有帮助的是将 ipv6 样式的 IP 添加到 /etc/hosts,如下所示:
# my original /etc/hosts ...
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
127.0.0.1 project.local
# adding this solved resolving:
fe80::1%lo0 project.local
获得http://项目.local现在立即显示
Resolving project.local... 127.0.0.1
Connecting to project.local|127.0.0.1|:80... connected.
而不是在解析 project.local 时挂起 5 秒钟。
答案3
在MacOSX Lion .local
域已被“保留”用于多播 DNS 解析器(bonjour)。
这意味着查找任何以 .local 结尾的域名都将导致 mDNS 查找(最多 5 秒)前/etc/hosts。
修复:
- 将你的测试域名更改为其他 TLD(例如
.dev
) - 使用 dscl 工具添加例外。
答案4
有用。
我用这个解决方案
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost6
fe80::1%lo0 localhost