DNS

Mac 上修改 /etc/hosts 不生效

/etc/hosts 文件只在这台 Mac 上把名称映射到 IP 地址。mDNSResponder 会读取它,但有些 App 和设置会绕过它。

适用于:所有当前 macOS 版本。核查日期:2026年10月29日

症状

  • 在 /etc/hosts 中添加了一行,但浏览器仍然打开旧网站。
  • 条目在“终端”中有效,但在某个 App 中无效。
  • example.com 有效,但 www.example.com 无效。

可能的原因

  • 行格式错误。每行必须以 IP 地址开头,后面是主机名。# 表示注释的开始。
  • 缺少名称。该文件只映射完全相同的名称。需要的每个名称都要添加,例如既要添加 www.example.com,也要添加 example.com。
  • 缓存的应答。macOS 或浏览器可能会在一段时间内保留旧地址。
  • 代理或 App 自己的 DNS。使用代理时,由代理服务器查询名称。有些 App 也有自己的 DNS 设置。

如何检查

  1. 显示该文件。

    cat /etc/hosts
  2. 向 macOS 解析器查询该名称。结果必须是文件中的地址。

    dscacheutil -q host -a name example.com
  3. 显示系统代理设置。代理会自行查询名称。

    scutil --proxy

如何修复

  1. 以管理员身份在文本编辑器中打开该文件。

    sudo nano /etc/hosts

    需要管理员密码。

  2. 为每个名称添加一行:先写 IP 地址,再写一个或多个名称。

    127.0.0.1   example.com www.example.com
  3. 保存文件。在 nano 中,依次按 Control-O、Return 和 Control-X。

  4. 清除 DNS 缓存。请参阅在 Mac 上刷新 DNS 缓存。

    sudo killall -HUP mDNSResponder

    需要管理员密码。

  5. 退出并重新打开浏览器。

  6. 如果 App 使用代理,在不用代理的情况下测试,或者在代理服务器上添加该条目。

常见问题

需要重启 Mac 吗?

不需要。保存文件,清除 DNS 缓存,然后重新打开 App。

可以使用 *.example.com 这样的通配符吗?

不可以。hosts 文件的格式包括地址、正式主机名和别名。每个名称都要写在这一行上。

参考资料

参考资料核查于 2026年10月29日。man 手册页为 macOS 自带版本;在“终端”中用 man <name> 打开。