我突然对 localhost 上的子域名无法正常工作感到苦恼。我的/etc/hosts
文件如下所示:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
127.0.0.1 develop2win.de
127.0.0.1 develop2win.de
127.0.0.1 alomvar.localhost
像这样将一个 IP 的所有主机名放在一行中也不起作用:
127.0.0.1 localhost alomvar.localhost develop2win.de www.develop2win.de
我还使用以下命令重新启动了适用于 OS X 10.9 Mavericks 的 DNS 解析器:
dscacheutil -flushcache; sudo killall -HUP mDNSResponder
但nslookup alomvar.localhost
在终端上发出的结果如下:
Server: 192.168.178.1
Address: 192.168.178.1#53
** server can't find alomvar.localhost: NXDOMAIN
这是我本地网络中路由器的 IP。在这种情况下,似乎跳过了 localhost hosts 文件进行解析。之前该过程develop2win.de
已成功解析并指向本地 Apache 虚拟主机。但现在甚至连这个都不起作用了,与上面的错误相同(WTF?)。但是,查找 plainlocalhost
仍然可以正常工作:
Server: 192.168.178.1
Address: 192.168.178.1#53
Name: localhost
Address: 127.0.0.1
更新 1:我也重启了,但没有任何变化。似乎 DNS 查询根本没有在本地解析,而是发送到我的路由器。
我遗漏了什么?是否有人尝试在 OS X Mavericks 上为 localhost 设置子域?这甚至与 Apache 无关,只是 DNS 问题。
这里有一个系统偏好设置中的 DNS 配置的屏幕截图顺便说一句。由于我的声誉还不足以嵌入图像,因此这是一个外部网站的链接。
更新 2:正如 dave_thompson_085 指出的那样,我在终端中使用host
和命令执行了检查。对于 localhost,它运行良好:ping
$ host localhost
localhost has address 127.0.0.1
但对于子域名则不然:
$ host alomvar.localhost
Host alomvar.localhost not found: 3(NXDOMAIN)
Ping 本地主机也可以正常工作:
$ ping localhost
PING localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.048 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.078 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.085 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.076 ms
^C
--- localhost ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.048/0.072/0.085/0.014 ms
现在,令人恼火的是,它也适用于子域名:
$ ping alomvar.localhost
PING alomvar.localhost (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.039 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.042 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.075 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.091 ms
^C
--- alomvar.localhost ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.039/0.062/0.091/0.022 ms
我如何能顺利地 ping 通,但无法解析子域名?当我看到互联网上其他人是如何做到的,显然它应该像这样工作。我不是网络方面的高手。我可能破坏了除设置此设置所需的其他东西之外的东西。
我也在dig
localhost 和子域上执行了。输出相当长,我认为这个问题已经够混乱了。请参阅这个文件用于挖掘输出。
更新 3:当断开我的 Mac 与网络的连接(禁用以太网网络适配器)时dig
,host
查找本地主机也无法失败。
更新 4:我发现在浏览器中可以显示 Apache 虚拟主机正在监听所谓的主机。这不是解决问题的办法,但我可以忍受这种情况。但是,我仍然对解决这个问题感兴趣。如果有人有进一步的想法,请告诉我。
答案1
dig
、host
和nslookup
都绕过系统名称解析器,直接查询 DNS。因此,它们不会看到 /etc/hosts 中定义的名称(除非它们是还DNS 服务中定义的名称)、或任何 mDNS(又名 Bonjour).local 名称、或目录服务中的计算机条目、或...
如果您想查看系统解析器看到的内容,最好的工具是dscacheutil
。不幸的是,它的语法相当笨拙(dscacheutil -q host -a name alomvar.localhost
),因此通常使用类似使用系统名称解析器的工具会更快ping
。但如果您想要完整的详细信息(例如,名称是否解析为多个地址),dscacheutil
是可行的方法。