首页/网络/协议速查/hosts 文件:本地静态解析
DNS 与域名解析60 条

hosts 文件:本地静态解析

hosts 是本地写死的「域名→IP 映射」,优先级通常高于 DNS;测试、迁移、屏蔽域名时第一手段,也是排查被误改的常见坑。

协议速查网络更新于 2026-10-13

hosts 文件是什么

hosts 是操作系统里的本地静态解析表,把域名直接映射到 IP,优先级通常高于 DNS 查询。它用于测试、临时迁移、屏蔽域名等场景,代价是只对当前机器生效、改动容易被人遗忘。很多「只有这一台机器解析异常」的问题,最终都指向某个被改过却没有记录下来的 hosts 条目。

基本信息

Linux 与 macOS 路径/etc/hosts
Windows 路径C 盘 Windows 目录下 System32\drivers\etc\hosts
格式IP 地址 域名 别名,字段之间用空白分隔
优先级通常高于 DNS,受 nsswitch.conf 的顺序设置影响
生效方式立即生效,但应用自身缓存需重启进程
编辑权限Windows 上需要管理员权限才能保存

典型使用场景

  • 上线前把测试域名临时指向测试机,避免污染正式 DNS 记录
  • 主机迁移或割接期间临时把域名指到新 IP,先验证再改 DNS
  • 屏蔽广告与恶意域名:把目标域名指向 127.0.0.1
  • 集群内部临时固定某个域名的解析结果,做小范围灰度
  • 排查解析类故障时确认是否存在残留的本地映射
  • 容器与虚拟机有各自的 hosts 文件,改动宿主机不会影响容器内解析,排障要进到对应环境确认

文件格式示例

文件格式示例
# Linux 与 macOS 路径: /etc/hosts
# Windows 路径: System32\drivers\etc\hosts
# 格式: IP 地址 域名 [别名...],用空白分隔
203.0.113.10   app.example.com app
127.0.0.1      blocked.example.com
# 以井号开头的行整行被忽略,IPv6 地址直接写全

验证是否命中本地映射

验证是否命中本地映射
getent hosts app.example.com          # 走完整解析链路,能反映 hosts 是否生效
dig +short app.example.com            # 注意 dig 不读 hosts,结果仍是 DNS 解析
ping -c 1 app.example.com             # 看实际解析到哪个地址
# Windows 上确认解析顺序与结果
# nslookup app.example.com
nsswitch.conf 里的 hosts 行决定解析顺序,常见配置是 files dns(先查本地文件再查 DNS)。若被改成 dns files,本地映射就失去优先权,这类改动有时来自安全加固脚本,排查时需要一并确认。
hosts 是最容易造成「只有我这台机器有问题」的配置点:排障时若 dig 结果正常而应用仍报错,先看 getent 与 hosts 文件,而不是怀疑 DNS 服务器。

易错点

  • 用 dig 验证 hosts 是否生效:dig 不读本地文件,结论会完全相反,应改用 getent 或 ping
  • 迁移完成后忘记删除临时条目,几个月后成为「某台机器解析总是旧地址」的隐藏原因
  • Windows 上直接编辑该文件遇到权限或被安全软件还原,修改看似成功实则未生效
  • 把 hosts 当成团队共享方案:它只对当前机器生效,跨机器统一解析必须改 DNS

数据来源与参考

  • man 5 hosts
  • RFC 952/1123(主机名语法)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌