我正在使用 Mac OS X 10.8.2,并且我的本地 /etc/hosts 中有以下内容:
127.0.0.1 dev.test.local
与此同时,我在本地安装了 nginx 来为该域提供静态文件。虽然它可以工作,但 nginx 需要大约 5 秒钟才能获得连接。演示如下:
ba@djuproera% time curl -I http://dev.test.local/
curl: (7) couldn't connect to host
curl -I http://dev.test.local/ 0.00s user 0.00s system 0% cpu 5.010 total
我注意到的是,如果我将我的主机文件更改为以下内容:
127.0.0.1 dev.test.com dev.test.local
我得到了正常的亚秒级响应:
ba@djuproera[master*](ruby-1.9.3)% time curl -I http://dev.test.local/
curl: (7) couldn't connect to host
curl -I http://dev.test.local/ 0.00s user 0.00s system 2% cpu 0.285 total
更加有趣的是,如果我切换 hosts 文件中域的顺序,我会再次收到缓慢的响应:
127.0.0.1 dev.test.local dev.test.com
给出:
ba@djuproera[master*](ruby-1.9.3)% time curl -I http://dev.test.local/
curl: (7) couldn't connect to host
curl -I http://dev.test.local/ 0.01s user 0.00s system 0% cpu 5.011 total
有人知道这里发生了什么事吗?
答案1
问题似乎与使用.local有关:
All .local domains are technically reserved for Multicast DNS (Bonjour),
and Lion no longer looks in /etc/hosts first when you try to lookup
a .local domain. Instead, it asks MDNS first, waits out the 5 second
timeout, then checks /etc/hosts.
来源:http://itand.me/mac-os-x-lion-local-domains-and-etchosts-oh-m
有趣的是,如果第一个主机首先使用另一个 TLD 来创建,那么定义两个不同的域名如何使其工作。