Hosts文件:它是什么、在哪里找到它以及如何在任何操作系统上编辑它
您的本地 DNS 覆盖 — 无需互联网
每次您在浏览器中输入域名时,您的计算机都会悄悄运行一个查找过程,将该名称转换为 IP 地址。但在联系外部 DNS 服务器之前,它会检查一个安静地存放在本地系统中、常被忽视的小型文本文件:hosts 文件。
这个文件是开发人员、系统管理员和高级用户都可以使用的最强大且最被低估的工具之一。它让您可以手动将域名映射到 IP 地址——即时、本地完成,无需触碰您的路由器或 DNS 提供商。无论您是在网站上线前进行测试、屏蔽广告服务器,还是排查 DNS 传播问题,hosts 文件都能让您直接、底层地控制机器解析域名的方式。
在本指南中,您将了解 hosts 文件究竟是什么,在 Windows、macOS 和 Linux 上的位置,以及如何安全有效地编辑它。
什么是 Hosts 文件?
hosts 文件是一个纯文本系统文件,用于将主机名(域名)映射到 IP 地址。它早于现代 DNS 系统,最初是 ARPANET 上用于解析名称的唯一机制。如今,它仍作为本地 DNS 覆盖层发挥作用——您的操作系统在进行任何外部 DNS 查询之前会首先检查它。
工作原理
当您访问一个网站时,您的操作系统按以下顺序进行解析:
- 检查本地 hosts 文件中是否有匹配条目
- 查询本地 DNS 缓存
- 联系已配置的 DNS 解析器(例如,您的 ISP 的 DNS 或公共解析器,如 8.8.8.8)
如果 hosts 文件包含匹配条目,查找过程就会在此停止,不会进行外部 DNS 查询。这使其速度极快,非常适合本地覆盖。
Hosts 文件的常见使用场景
| 使用场景 | 工作方式 |
|---|---|
| 本地网站测试 | 将域名指向 127.0.0.1 或暂存服务器 IP |
| 屏蔽不需要的网站 | 将广告或追踪域名重定向到 0.0.0.0 |
| 绕过 DNS 传播延迟 | 为新迁移的域名手动设置 IP |
| 开发环境路由 | 将自定义本地域名映射到 Docker 容器或虚拟机 |
| 覆盖错误的 DNS 条目 | 在 DNS 配置错误时强制使用正确的 IP |
> 开发者专业提示:如果您正在运行本地开发环境,或在 DNS 传播完成之前在 VPS 托管服务器上测试网站,编辑 hosts 文件是预览线上网站而无需更改 DNS 设置的最快方式。
Hosts 文件在哪里?
hosts 文件的位置因操作系统而异。以下是快速参考:
Windows
C:WindowsSystem32driversetchostsmacOS
/etc/hostsLinux(所有主要发行版)
/etc/hosts在 macOS 和 Linux 上,/etc/hosts 通常是系统管理的符号链接或直接文件。在使用 systemd-resolved 的 Linux 发行版上,该文件仍对本地覆盖具有优先权。
如何在 Windows 上编辑 Hosts 文件
在 Windows 上编辑 hosts 文件需要管理员权限。该文件受系统保护,标准用户账户无法修改它。
第一步:以管理员身份打开记事本
- 按 Windows 键 + S,在搜索栏中输入
Notepad - 右键单击搜索结果中的记事本
- 选择以管理员身份运行
- 如果用户账户控制(UAC)提示,点击是
第二步:打开 Hosts 文件
- 在记事本中,点击文件 → 打开
- 导航到:
C:WindowsSystem32driversetc - 在文件类型下拉菜单(文件名字段旁边)中,将其从
Text Documents (*.txt)更改为所有文件 (*.*) - 选择名为
hosts的文件,然后点击打开
第三步:添加或修改条目
每个条目的格式很简单:
[IP Address] [Hostname]在文件底部添加您的条目。例如:
# Redirect example.com to local development server
127.0.0.1 example.com
# Point testsite.com to a staging VPS
192.168.1.100 testsite.com
# Block an ad network
0.0.0.0 ads.unwanteddomain.com以 # 开头的行是注释,系统会忽略它们。
第四步:保存文件
点击文件 → 保存。如果收到权限错误,请确保您以管理员身份打开了记事本。不要将文件保存为 .txt 扩展名。
第五步:刷新 DNS 缓存
保存后,刷新 DNS 缓存以使更改立即生效:
- 以管理员身份打开命令提示符
- 运行以下命令:
ipconfig /flushdns您应该会看到消息:*”已成功刷新 DNS 解析器缓存。”*
如何在 macOS 上编辑 Hosts 文件
在 macOS 上,hosts 文件通过终端使用具有 sudo(超级用户)权限的文本编辑器进行编辑。
第一步:打开终端
按 Command + Space 打开 Spotlight 搜索,输入 Terminal,然后按 Enter。
第二步:使用 nano 打开 Hosts 文件
运行以下命令:
sudo nano /etc/hosts在提示时输入您的管理员密码。输入时密码不会显示——这是正常现象。
第三步:编辑文件
nano 文本编辑器将打开 hosts 文件。使用方向键导航到文件底部并添加您的条目:
# Development environment
127.0.0.1 myproject.local
# Staging server
203.0.113.45 staging.example.com
# Block tracking domain
0.0.0.0 tracker.example.net第四步:保存并退出
- 按 Control + O 写入(保存)文件
- 按 Enter 确认文件名
- 按 Control + X 退出 nano
第五步:在 macOS 上刷新 DNS 缓存
根据您的 macOS 版本运行相应命令:
macOS Monterey、Ventura、Sonoma(及大多数现代版本):
sudo killall -HUP mDNSRespondermacOS Big Sur 及更早版本(替代方案):
sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder您的更改现在将在整个系统范围内生效。
如何在 Linux 上编辑 Hosts 文件
Linux 遵循与 macOS 相同的一般流程,因为两者都是基于 Unix 的系统。您需要 root 或 sudo 访问权限。
第一步:打开终端
启动您的终端应用程序。在大多数桌面环境中,您可以在应用程序菜单中找到它,或按 Ctrl + Alt + T。
第二步:打开 Hosts 文件
sudo nano /etc/hosts在提示时输入您的 root 或 sudo 密码。
第三步:添加您的条目
导航到文件底部并添加您的自定义映射:
# Local dev environment
127.0.0.1 devsite.local
# Internal server
10.0.0.5 internal.company.com
# Block unwanted domain
0.0.0.0 malicious-ads.example.com第四步:保存并退出
- 按 Control + O,然后按 Enter 保存
- 按 Control + X 退出 nano
第五步:在 Linux 上刷新 DNS 缓存
刷新 DNS 的命令因发行版和 DNS 解析器而异:
Ubuntu / Debian(使用 systemd-resolved):
sudo systemd-resolve --flush-caches或在较新版本上:
sudo resolvectl flush-cachesCentOS / RHEL / Fedora:
sudo systemctl restart NetworkManagerArch Linux:
sudo systemd-resolve --flush-caches如果您正在运行自定义 DNS 缓存守护进程,如 nscd 或 dnsmasq,请重启相关服务:
sudo systemctl restart nscd
# or
sudo systemctl restart dnsmasq了解默认 Hosts 文件结构
当您第一次在任何操作系统上打开 hosts 文件时,您会看到一些默认条目。以下是典型的 Linux/macOS 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关键条目说明:
127.0.0.1 localhost — 将回环地址映射到”localhost”。这对本地网络至关重要,绝不应删除。
::1 localhost — 回环地址的 IPv6 等效项。
255.255.255.255 broadcasthost — 用于网络广播(macOS 特有)。
切勿删除这些默认条目。这样做可能会破坏本地应用程序网络、数据库连接和其他系统服务。
编辑 Hosts 文件的最佳实践
1. 始终先创建备份
在进行任何更改之前,备份原始文件:
Linux / macOS:
sudo cp /etc/hosts /etc/hosts.backup
Windows(以管理员身份运行命令提示符):
copy C:WindowsSystem32driversetchosts C:WindowsSystem32driversetchosts.backup
如果出现问题,您可以立即恢复原始文件。
2. 使用注释记录您的更改
始终使用 # 为您的条目添加注释。这在团队或服务器环境中尤为重要:
# Added 2024-01-15 — Staging environment for client project
192.168.1.50 staging.clientproject.com
# Temporary block — remove after campaign ends
0.0.0.0 ads.campaign-tracker.net
3. 屏蔽域名时使用 0.0.0.0 而非 127.0.0.1
屏蔽域名时,0.0.0.0 通常优于 127.0.0.1,因为:
它不会尝试连接到您的本地机器
失败更快(无连接超时)
不会干扰在 80/443 端口上运行的本地 Web 服务器
4. 不要屏蔽关键系统域名
屏蔽以下相关域名时请谨慎:
Windows Update 或 macOS 软件更新服务
防病毒软件更新服务器
云同步服务(Dropbox、OneDrive、iCloud)
您使用的软件的许可证验证服务器
5. 保持条目有序
将相关条目分组,并使用注释标题以提高清晰度:
# ==========================================
# LOCAL DEVELOPMENT ENVIRONMENTS
# ==========================================
127.0.0.1 myapp.local
127.0.0.1 api.myapp.local
# ==========================================
# BLOCKED DOMAINS
# ==========================================
0.0.0.0 ads.example.com
0.0.0.0 tracker.example.net
6. 记住 Hosts 文件更改仅限本地
hosts 文件只影响其所在的机器。如果您管理多台服务器或需要在整个基础设施中应用 DNS 更改,则需要在服务器或网络级别配置 DNS。对于管理多个环境的团队,配置了本地 DNS 解析器(如 BIND 或 Unbound)的独立服务器是更具可扩展性的解决方案。
高级使用场景
在 DNS 传播之前测试网站
当您将网站迁移到新的托管提供商或新的带 cPanel 的 VPS 时,DNS 传播可能需要几分钟到 48 小时不等。您无需等待,只需将新服务器的 IP 添加到 hosts 文件中,即可立即测试网站在新服务器上的实际效果:
# Testing migration to new VPS — remove after DNS propagates
203.0.113.10 yourdomain.com
203.0.113.10 www.yourdomain.com
打开浏览器,导航到 yourdomain.com,您将看到托管在新服务器上的网站——而其他所有人仍然看到旧网站。
设置本地开发域名
开发人员通常更喜欢为本地项目使用真实的域名,而不是 localhost:3000。您可以创建自定义本地域名:
127.0.0.1 myproject.dev
127.0.0.1 api.myproject.dev
127.0.0.1 admin.myproject.dev
将其与配置了虚拟主机的本地 Web 服务器(Apache、Nginx 或 Caddy)配合使用,您就拥有了一个简洁、专业的本地开发环境。
屏蔽整个广告网络
您可以添加多个条目来屏蔽已知的广告投放和追踪域名:
0.0.0.0 doubleclick.net
0.0.0.0 googlesyndication.com
0.0.0.0 adservice.google.com
对于更全面的方法,StevenBlack 的 hosts 项目提供定期更新的综合 hosts 文件,包含数万个被屏蔽的域名。
常见 Hosts 文件问题排查
更改未生效
您刷新 DNS 缓存了吗?这是最常见的原因。请运行适合您操作系统的刷新命令。
您是否正确保存了文件?在 Windows 上,确保您没有意外将其保存为 hosts.txt。
您的浏览器是否使用了自己的 DNS 缓存?Chrome 和 Firefox 维护各自的 DNS 缓存。尝试清除它们或打开隐私/无痕窗口。
您是否在使用 VPN?VPN 客户端通常会覆盖本地 DNS 设置,完全绕过 hosts 文件。
权限被拒绝错误
Windows:确保记事本(或您的编辑器)以管理员身份运行。
Linux/macOS:确保在命令前使用 sudo。
网站仍解析到旧 IP
验证条目格式是否正确:IP_ADDRESS[TAB or SPACES]hostname — 没有 http:// 或尾部斜杠。
检查域名中是否有拼写错误。
确认文件中较高位置没有冲突的条目。
意外破坏了某些内容
恢复您的备份:
# Linux/macOS
sudo cp /etc/hosts.backup /etc/hosts
# Windows (as Administrator)
copy C:WindowsSystem32driversetchosts.backup C:WindowsSystem32driversetchosts
Hosts 文件与 DNS:何时使用各自
场景
Hosts 文件
DNS 配置
在单台机器上快速本地测试
✅ 理想
❌ 过于复杂
团队范围的开发环境
❌ 无法扩展
✅ 使用内部 DNS
在单个设备上屏蔽网站
✅ 效果良好
❌ 不必要
生产域名管理
❌ 不适合
✅ 必需
上线前网站测试
✅ 完美
❌ 会影响所有用户
多服务器基础设施
❌ 过于手动
✅ 必不可少
对于生产环境,始终通过您的域名注册商或托管控制面板管理 DNS。如果您需要专业地注册或管理域名,通过可靠提供商进行域名注册可确保您的 DNS 记录在互联网上正确、安全地传播。
同样,如果您正在运行邮件服务器并需要确保正确的电子邮件投递,编辑 hosts 文件并不能替代正确配置的 MX 记录。请探索专用的电子邮件托管解决方案,以获得可靠、配置正确的邮件基础设施。
快速参考:Hosts 文件速查表
文件位置
操作系统
路径
Windows
C:WindowsSystem32driversetchosts
macOS
/etc/hosts
Linux
/etc/hosts
打开以进行编辑
操作系统
命令 / 方法
Windows
记事本 → 以管理员身份运行 → 文件 → 打开
macOS
sudo nano /etc/hosts
Linux
sudo nano /etc/hosts
刷新 DNS 缓存
操作系统
命令
Windows
ipconfig /flushdns
macOS
sudo killall -HUP mDNSResponder
Ubuntu/Debian
sudo systemd-resolve --flush-caches
CentOS/RHEL
sudo systemctl restart NetworkManager
条目格式
[IP Address] [hostname] [optional alias]
# Examples:
127.0.0.1 localhost
127.0.0.1 myapp.local
0.0.0.0 blocked-site.com
192.168.1.10 staging.example.com
结论:使用 Hosts 文件掌控您的本地 DNS
hosts 文件是一个看似简单却具有惊人广泛用途的工具。只需几行纯文本,您就可以重定向域名、屏蔽不需要的内容、测试新的服务器配置并排查 DNS 问题——所有这些都无需触碰您的路由器、DNS 提供商或网络基础设施。
关键要点:
始终备份 hosts 文件,然后再进行编辑
使用注释记录您所做的每一项更改
每次编辑后刷新 DNS 缓存,以确保更改立即生效
屏蔽域名时使用 0.0.0.0 而非 127.0.0.1对于在托管环境中工作的开发人员和系统管理员,hosts 文件与配置良好的服务器完美配合。无论您是在 VPS 托管计划上测试新应用程序、在共享虚拟主机账户上预览网站上线前的效果,还是在安装 SSL 证书后验证 SSL 配置,hosts 文件都能为您提供自信、高效工作所需的本地控制。
现在打开该文件,仔细进行更改,刷新缓存,全面掌控您的机器访问互联网的方式。
