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.comnsswitch.conf 里的 hosts 行决定解析顺序,常见配置是 files dns(先查本地文件再查 DNS)。若被改成 dns files,本地映射就失去优先权,这类改动有时来自安全加固脚本,排查时需要一并确认。
hosts 是最容易造成「只有我这台机器有问题」的配置点:排障时若 dig 结果正常而应用仍报错,先看 getent 与 hosts 文件,而不是怀疑 DNS 服务器。