hosts文件优先于dns解析,是本地静态映射,修改后立即生效;需用root权限编辑(如sudo nano /etc/hosts),每行格式为“ip 域名”,支持多域名及注释,验证应使用ping或getent hosts而非nslookup。

Linux 中 DNS 解析本身不依赖 hosts 文件,但系统默认会先查 /etc/hosts,再走 DNS 查询。所以“配置本地 hosts 域名映射”不是在配置 DNS,而是绕过 DNS 的静态解析方式——它更轻、更快、无需服务重启。
怎么编辑 /etc/hosts 文件
必须用 root 权限编辑,否则保存失败:
- 推荐命令:
sudo nano /etc/hosts或sudo vim /etc/hosts - 每行一条映射,格式为:
IP地址[空格或Tab]域名[可选注释] - 示例:
192.168.1.100 api.internal或127.0.0.1 test.local www.test.local - 支持一行绑定多个域名(用空格分隔),也支持 # 开头的注释行
为什么改了没生效?常见原因
hosts 映射写对了,但 ping 或 curl 仍连错地址,可能因为:
- 应用自身做了 DNS 缓存(如 Chrome、Java 进程、某些容器内程序),需重启应用或清缓存
- 用了
nslookup或dig测试——它们跳过 hosts,只查 DNS,应改用ping、curl -v或getent hosts 域名验证 - /etc/nsswitch.conf 中的
hosts: files dns被意外改成hosts: dns files,导致 hosts 被忽略(极少见,但需确认)
hosts 和 DNS 配置的关系
二者完全独立,但共存时有明确优先级:
- hosts 是本地文件映射,不发网络请求,修改即生效
- DNS 配置在
/etc/resolv.conf(nameserver 行)或网卡配置中,决定向哪个远程服务器发查询 - 系统按
/etc/nsswitch.conf规定顺序解析:默认hosts: files dns,即先查 files(即 hosts),再查 dns - 想临时禁用 hosts?可把对应行前面加 # 注释掉,无需重启任何服务
什么场景适合用 hosts 映射
它不是 DNS 替代方案,而是精准控制单机行为的工具:
- 开发测试:把
dev.example.com指向本地 127.0.0.1:3000 服务 - 内网访问:给无 DNS 的私有机房机器起易记域名,如
db01.intra - 屏蔽广告或恶意域名:指向 0.0.0.0 或 127.0.0.1
- 灰度发布前验证新 IP:在上线前让本机流量先切过去











