设置并将 subdomain.localhost 解析为 127.0.0.1 的所有步骤?

设置并将 subdomain.localhost 解析为 127.0.0.1 的所有步骤?

我突然对 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 通,但无法解析子域名?当我看到互联网上其他人是如何做到的,显然它应该像这样工作。我不是网络方面的高手。我可能破坏了除设置此设置所需的其他东西之外的东西。

我也在diglocalhost 和子域上执行了。输出相当长,我认为这个问题已经够混乱了。请参阅这个文件用于挖掘输出。

更新 3:当断开我的 Mac 与网络的连接(禁用以太网网络适配器)时dighost查找本地主机也无法失败。

更新 4:我发现在浏览器中可以显示 Apache 虚拟主机正在监听所谓的主机。这不是解决问题的办法,但我可以忍受这种情况。但是,我仍然对解决这个问题感兴趣。如果有人有进一步的想法,请告诉我。

答案1

dighostnslookup都绕过系统名称解析器,直接查询 DNS。因此,它们不会看到 /etc/hosts 中定义的名称(除非它们是DNS 服务中定义的名称)、或任何 mDNS(又名 Bonjour).local 名称、或目录服务中的计算机条目、或...

如果您想查看系统解析器看到的内容,最好的工具是dscacheutil。不幸的是,它的语法相当笨拙(dscacheutil -q host -a name alomvar.localhost),因此通常使用类似使用系统名称解析器的工具会更快ping。但如果您想要完整的详细信息(例如,名称是否解析为多个地址),dscacheutil是可行的方法。

相关内容