15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
30.10.2024
1 +1

macOS Hosts 文件:本地 DNS 控制完整指南

无论您是在发布前测试新网站的开发者、排查服务器迁移问题,还是只是想屏蔽令人分心的网站,macOS hosts 文件都是您工具库中最强大——也是最少被使用——的工具之一。本综合指南将带您了解所需的一切知识:hosts 文件是什么、在哪里找到它、如何安全地编辑它,以及如何将其用于实际工作流程,例如预发布服务器测试和本地开发环境。

什么是 Hosts 文件?

hosts 文件是一个纯文本系统文件,用于将人类可读的主机名(如 example.com)映射到特定的 IP 地址。在您的 Mac 向外部解析器发送 DNS 查询之前,它会首先检查本地 hosts 文件。如果存在匹配条目,则使用该 IP 地址——无需涉及 DNS 服务器。

这使得 hosts 文件成为一种本地 DNS 覆盖层,让您能够精细控制计算机解析域名的方式。它在后台静默运行,正确使用时,对开发者和系统管理员来说都是一个极其高效的工具。

核心使用场景一览

使用场景功能说明
网站屏蔽将域名映射到 0.0.0.0 以阻止访问
本地开发将自定义域名映射到 127.0.0.1 用于本地测试
DNS 测试 / 迁移在 DNS 传播之前将实时域名指向新服务器 IP
预发布环境在不更改公共 DNS 的情况下预览新主机上的网站
安全加固屏蔽已知的恶意域名或广告投放域名

macOS 上的 Hosts 文件在哪里?

在 macOS 上,hosts 文件位于 /etc/ 目录中。完整路径为:

/etc/hosts

这是一个受保护的系统文件,这意味着您需要管理员(root)权限才能修改它。您不能简单地双击它开始编辑——必须通过 sudo 在 Terminal 中使用提升的权限。

> 注意:macOS 上的 /etc/ 目录实际上是指向 /private/etc/ 的符号链接,因此 /etc/hosts/private/etc/hosts 指向同一个文件。

如何在 macOS 上编辑 Hosts 文件:分步指南

第一步 — 打开 Terminal

启动 Terminal 应用程序。您可以通过以下两种方式操作:

  • Spotlight 搜索:Command + Space,输入 Terminal,然后按 Enter
  • Finder:导航至 Applications > Utilities > Terminal

第二步 — 以提升的权限打开 Hosts 文件

使用 nano 文本编辑器配合 sudo 打开 hosts 文件:

sudo nano /etc/hosts

系统将提示您输入 macOS 管理员密码。输入后按 Enter。请注意,输入时密码字段将保持空白——这是 Terminal 中 sudo 的正常行为。

第三步 — 了解默认条目

文件在 nano 中打开后,您将看到 macOS 自带的默认条目:

##
# 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

请勿删除或修改这些默认条目。它们是系统正常运行所必需的。所有自定义条目应添加在这些行的下方

第四步 — 添加自定义条目

hosts 文件条目的语法非常简单:

<IP address>    <hostname>    [optional alias]

每个条目必须单独占一行。以下是一些实际示例:

屏蔽网站:

0.0.0.0    facebook.com
0.0.0.0    www.facebook.com

映射本地开发域名:

127.0.0.1    myproject.local
127.0.0.1    myproject.dev

将域名指向特定服务器用于迁移测试:

192.168.1.100    mywebsite.com
192.168.1.100    www.mywebsite.com

您还可以使用 # 字符添加行内注释,以保持 hosts 文件的整洁有序:

# --- Local Development Projects ---
127.0.0.1    project-alpha.local
127.0.0.1    project-beta.local

# --- Migration Testing: New Server IP 203.0.113.50 ---
203.0.113.50    clientsite.com
203.0.113.50    www.clientsite.com

第五步 — 保存文件

在 nano 中完成更改后:

  1. Control + O 写入(保存)文件
  2. Enter 确认文件名
  3. Control + X 退出 nano

第六步 — 刷新 DNS 缓存

仅编辑 hosts 文件还不够——macOS 会缓存 DNS 查询,因此您需要刷新 DNS 缓存,以强制系统立即识别新条目。

在 Terminal 中运行以下命令:

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

此命令执行两项操作:

  • dscacheutil -flushcache — 清除本地 DNS 缓存
  • killall -HUP mDNSResponder — 重启负责 macOS DNS 解析的 mDNSResponder 进程

运行后,打开浏览器并测试域名。更改应立即生效。

> macOS 版本说明:上述刷新命令适用于 macOS Monterey、Ventura、Sonoma 和 Sequoia。在较旧版本(Yosemite 之前)上,命令可能略有不同。

深入解析实际使用场景

使用场景一:屏蔽网站

hosts 文件是在系统层面屏蔽令人分心或有害网站的最简单、最有效的方法之一——无需任何第三方软件。

通过将域名映射到 0.0.0.0(一个不可路由的地址),您可以阻止浏览器访问该网站:

0.0.0.0    reddit.com
0.0.0.0    www.reddit.com
0.0.0.0    twitter.com
0.0.0.0    www.twitter.com

与浏览器扩展不同,此屏蔽适用于整个系统——它影响 Mac 上的每个浏览器和应用程序。

使用场景二:本地开发环境

如果您在本地构建网站或 Web 应用程序,hosts 文件允许您为本地环境分配自定义域名,而不必使用通用的 http://localhosthttp://127.0.0.1

127.0.0.1    myshop.local
127.0.0.1    clientproject.local
127.0.0.1    wordpress-staging.local

这在使用 WordPressJoomlaLaravel 项目时特别有用,因为这些项目使用绑定到特定主机名的绝对 URL 或 Cookie 域名。将其与本地 Web 服务器堆栈(如 MAMP、Laravel Valet 或 Docker 容器)配合使用,即可获得专业的本地开发工作流程。

如果您的开发环境运行在远程 VPS 托管实例上而非本地,同样的原则也适用——您可以在更新公共 DNS 记录之前,将域名直接指向您的 VPS IP 进行测试。

使用场景三:无需等待 DNS 传播即可测试服务器迁移

这可以说是对开发者和系统管理员来说最有价值的使用场景。当您将网站迁移到新服务器时——无论是更换托管服务商还是升级基础设施——DNS 传播可能需要几分钟到 48 小时不等。

hosts 文件让您能够立即在新服务器上预览网站,仅限您自己的计算机,不影响其他任何人。

示例场景:您正在将 mywebsite.com 迁移到 IP 地址为 203.0.113.50 的新独立服务器。添加以下条目:

203.0.113.50    mywebsite.com
203.0.113.50    www.mywebsite.com

现在,当您在浏览器中输入 mywebsite.com 时,您的 Mac 将从新服务器加载网站——即使公共 DNS 仍指向旧服务器。这允许您:

  • 验证所有页面是否正确加载
  • 检查 SSL 证书是否正确安装
  • 测试联系表单、结账流程和动态功能
  • 确认数据库连接和媒体文件完整无缺

一旦确认一切正常,即可更新公共 DNS 记录。对您的访客来说,过渡将是无缝的。

使用场景四:绕过 DNS 进行故障排查

有时 DNS 问题可能导致网站无法访问,即使服务器本身运行正常。hosts 文件让您能够完全绕过 DNS,直接连接到已知 IP 地址来诊断问题。

这在以下情况下特别有用:

  • 您的域名 DNS 记录配置错误
  • 您在 DNS 传播之前测试新的 SSL 证书安装
  • 您需要在 DNS 问题解决期间验证服务器是否正常响应

使用场景五:测试电子邮件托管配置

如果您正在设置或迁移电子邮件托管,并需要在 DNS 记录更新之前验证邮件服务器是否可在特定 IP 上访问,您可以在 hosts 文件中临时映射您的邮件域名,以测试连接性和配置。

验证 Hosts 文件更改

在刷新 DNS 缓存之前,最好先验证条目是否已正确保存。您可以使用以下命令查看 hosts 文件的当前内容而无需编辑:

cat /etc/hosts

您还可以使用 ping 命令验证主机名是否解析到预期的 IP:

ping mywebsite.com

输出应显示您在 hosts 文件中映射的 IP 地址。

恢复默认 Hosts 文件

如果您的 hosts 文件变得杂乱或出现问题,您可以将其重置为默认状态。使用 sudo nano /etc/hosts 打开文件,删除所有自定义条目,并确保文件仅包含原始默认内容:

##
# 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

保存文件,退出 nano,并使用第六步中的命令刷新 DNS 缓存。您的系统将恢复对所有域名使用标准 DNS 解析。

安全注意事项

虽然 hosts 文件是一个强大的工具,但请牢记以下安全最佳实践:

  • 限制访问:只有管理员才应具有 /etc/hosts 的写入权限。使用 ls -la /etc/hosts 验证权限——应显示 -rw-r--r--
  • 使用后删除测试条目:完成迁移测试后,不要将测试条目保留在文件中。它们可能在以后造成混乱和意外行为。
  • 警惕恶意软件:某些恶意软件会修改 hosts 文件,将合法域名重定向到恶意服务器。定期检查您的 hosts 文件,确保不存在未经授权的条目。
  • 团队使用版本控制:如果多名开发者共享开发环境,请考虑在共享的 README 或版本控制的配置文件中记录您的 hosts 文件条目。

快速参考:常用命令

任务命令
打开 hosts 文件进行编辑sudo nano /etc/hosts
查看 hosts 文件(只读)cat /etc/hosts
刷新 DNS 缓存(macOS Ventura/Sonoma)sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
检查文件权限ls -la /etc/hosts
验证主机名解析ping yourdomain.com
在 nano 中保存Control + O,然后 Enter
退出 nanoControl + X

常见问题解答

编辑 hosts 文件后需要重启 Mac 吗?

不需要。使用 dscacheutil 命令刷新 DNS 缓存即可。无需重启。

对 hosts 文件的更改会影响 Mac 上的其他用户吗?

会。hosts 文件是系统级的,因此更改会影响同一台计算机上的所有用户账户。

hosts 文件支持 HTTPS 吗?

支持,但有一个注意事项。hosts 文件仅控制 IP 解析——它不处理 SSL/TLS 证书。如果您通过 hosts 文件将域名重定向到新服务器,而该服务器上的 SSL 证书与域名不匹配,您的浏览器将显示证书警告。

hosts 文件支持通配符吗?

不支持。macOS hosts 文件不支持通配符条目。每个主机名必须在单独的行上明确列出。

编辑 hosts 文件会影响我的 VPN 吗?

这取决于您的 VPN 配置。某些 VPN 会覆盖本地 DNS 设置,这可能导致 VPN 处于活动状态时 hosts 文件条目被忽略。

结语:全面掌控您的本地 DNS

macOS hosts 文件看似简单,实则功能强大。只需一个文本文件和几条 Terminal 命令,您就可以屏蔽令人分心的网站、构建专业的本地开发环境,并充满信心地测试服务器迁移——所有这些都无需等待 DNS 传播或触碰您的生产基础设施。

对于使用 VPS 控制面板或在共享虚拟主机上管理网站的开发者来说,掌握 hosts 文件是一项基础技能,将为您节省数小时的故障排查时间。下次准备网站迁移或启动新开发项目时,请首先使用 /etc/hosts——这是控制 Mac 解析互联网上任何域名的最快、最可靠的方式。

15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用