无论出于什么原因,我的 Mac OS X 的别名localhost
似乎突然停止工作了。可能是某些更新导致了这种情况,但我不确定是什么。
这是我的主机文件:
##
# 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 localhost
fe80::1%lo0 localhost
127.0.0.1 ian.dev
127.0.0.1 d8.dev
尽管 ian.dev 位于 127.0.0.1,但当我使用进行调试时,dscacheutil -q host -a name ian.dev
我得到:
name: ian.dev
ip_address: 127.0.53.53
localhost 本身正在运行,我也可以访问 localhost 内的子文件夹,但任何新的别名似乎总是指向该 IP 而不是 127.0.0.1。
答案1
最终找到了解决办法Stack Overflow 上的这个答案。
似乎我的 hosts 文件不知怎么损坏了。清理文件的一系列命令最终修复了它:
tr '\015' '\012' < /etc/hosts > /tmp/hosts.$$
mv /etc/hosts /etc/hosts.bad
mv /tmp/hosts.$$ /etc/hosts
# fix up permissions while we are at it
chown root:wheel /etc/hosts
chmod 644 /etc/hosts
答案2
127.0.53.53
当存在潜在名称冲突问题时,IP 地址返回如 ICANN 官方文档中所述:
127.0.53.53 是一个特殊的 IPv4 地址,它将出现在系统日志中,提醒系统管理员存在潜在的名称冲突问题,以便快速诊断和补救。“53”用作助记符,表示由于使用网络端口 53 进行 DNS 服务而导致的 DNS 相关问题。
知道了这一点,我相信问题出在您拥有两个与之.dev
关联的条目;ian.dev
和d8.dev
。我的想法是,系统上的 DNS 解析器看到.dev
试图添加.dev
到.local
区域(即传统的localhost
“TLD”)。它只是因为某种原因而阻塞。或者也许它试图.dev
在现实世界中进行解析,并将您的本地设置视为与现实世界顶级域.dev
冲突?.dev
我假设您这样做是为了在您的机器上进行某种基于 Apache 名称的虚拟主机开发。如果是这样,看看如果您更改这些别名以删除点 ( .
),它们会变成这样:ian_dev
和d8_dev
。或者将它们更改为ian.local
和 d8.local`。
调整你的开发环境将会很耗时,但我相信它应该会起作用。
除此之外,你可以在系统层面上做一些更具侵入性的事情,这可能会奏效。这个想法来自Server Fault 上的这个答案resolv.conf
。只需像这样打开 DNS 文件:
sudo nano /etc/resolv.conf
options
并在文件底部添加以下行:
options ndots:2
这可能也有效。更多详情来自这个网站。此外,只要您有resolv.conf
,您可能想检查一下那里是否有其他设置会搞砸工作。例如,以下是我的 的内容resolv.conf
:
#
# Mac OS X Notice
#
# This file is not used by the host name and address resolution
# or the DNS query routing mechanisms used by most processes on
# this Mac OS X system.
#
# This file is automatically generated.
#
nameserver 208.67.220.222
nameserver 208.67.220.220
我那里只有两个条目用于 OpenDNS namservers。没有其他的。如果您有超过 2 个nameserver
条目(或者可能没有那么多;您的配置可能是空的),那么我建议注释掉这些条目,看看会发生什么。