hosts文件实现本地域名映射的核心操作,就是在系统hosts文件末尾按“IP地址 域名”格式添加一行记录,保存后系统会优先读取该映射,不再向DNS服务器查询,不同系统路径和刷新命令不一样,但原理完全一致。
hosts文件凭什么能改域名解析?
hosts文件是操作系统自带的本地静态映射表,存在于每一台电脑和服务器上,它就像是你手机通讯录里给某个号码备注了姓名,拨号时直接找姓名,不用去查黄页。
系统在需要解析域名时,通常会按照固定顺序走:
- 先查浏览器或系统自身的DNS缓存
- 再查本地hosts文件
- 最后才向DNS服务器发起查询
换句话说,只要hosts文件里写了“192.168.1.10 dev.example.com”,系统访问dev.example.com时就直奔192.168.1.10,这也是开发人员搭建本地测试环境、运维人员做内网域名解析最常用的手段。
因为优先级足够高,hosts文件映射甚至可以覆盖公网DNS解析结果,但这也意味着一旦写错,网站可能直接打不开。
Windows修改hosts文件路径与操作步骤
Windows系统下,hosts文件固定存放在这个路径:
C:WindowsSystem32driversetchosts
这个文件没有扩展名,用记事本打开就能编辑,但Windows对系统目录有权限保护,直接双击保存往往会提示“没有权限”。
正确操作步骤如下:
- 在开始菜单搜索“记事本”,右键选择“以管理员身份运行”
- 在记事本里点击“文件”菜单,选择“打开”
- 将文件类型从“文本文档”改为“所有文件”
- 导航到C:WindowsSystem32driversetc,选中hosts打开
- 在文件末尾另起一行,输入IP地址和域名,中间用空格或Tab隔开
- 保存文件,关闭记事本
举个例子,把本地测试站点指向本机:
0.0.1 test.local
保存后打开浏览器访问test.local,就会看到本机搭建的Web服务,但有时系统或浏览器缓存了旧的DNS结果,需要手动刷新一下:

ipconfig /flushdns
这条命令会清空Windows的DNS解析缓存,让新的hosts记录立刻生效。
Windows下hosts文件修改后不生效怎么办
很多人在Windows上兴冲冲改完hosts,结果浏览器访问还是老样子,多数情况下不是映射写错了,而是缓存或格式在捣乱。
可以按下面顺序排查:
- 确认文件保存时没有自动加上.txt后缀,文件名必须仍是hosts
- 检查那行记录前面有没有多余的空格、换行或#号,#号开头表示注释,不会生效
- 用管理员身份重新打开确认修改已经保存成功
- 执行ipconfig /flushdns刷新DNS缓存
- 关闭并重新打开浏览器,或使用无痕窗口排除浏览器缓存
- 如果使用了代理工具,检查代理是否绕过本地hosts解析
还有一种情况容易被忽略:IPv6地址优先级,某些系统和浏览器会优先走IPv6的DNS查询,如果hosts里只写了IPv4地址,域名可能仍然解析到IPv6结果,行业共识认为,同时添加IPv4和IPv6两条映射可以避免这种怪问题。
Linux修改hosts文件命令与本地域名映射
在Linux服务器或开发机上,hosts文件路径是:
/etc/hosts
修改时通常使用vi、vim或nano,需要root权限或sudo。
以Ubuntu为例,执行:
sudo nano /etc/hosts
在文件末尾添加:
168.1.50 db.internal
保存退出即可,Linux系统的hosts修改后会立即生效,不需要额外刷新DNS缓存,因为Linux的解析器通常实时读取hosts文件。
如果需要批量追加,可以用echo命令配合重定向:
echo "192.168.1.60 cache.internal" | sudo tee -a /etc/hosts
这条命令会把新记录追加到hosts文件末尾,适合写脚本或批量配置多台服务器,对于经常需要远程调试的开发场景,把测试数据库、测试接口域名全部映射到内网IP,能省去反复改代码配置的麻烦。
hosts文件域名映射有什么用?常见使用场景
这个问题的答案,几乎每个开发或运维人员都能说出几条,本质上,hosts文件让你可以“欺骗”本机的域名解析系统,把任意域名指向任意IP。
具体场景大致分四类:
- 本地开发测试:把生产域名或测试域名指向127.0.0.1,本地跑服务直接调试,不用改代码里的接口地址
- 屏蔽广告或恶意网站:把广告域名、跟踪脚本域名指向0.0.0.0或127.0.0.1,让请求直接失败
- 内网服务器域名化访问:给局域网里的NAS、路由器、测试服务器配置一个易记的域名,不用记IP
- 临时绕过DNS故障:当公共DNS解析异常时,手动指定常用网站的IP,恢复访问
屏蔽网站是最容易上手也最容易出问题的操作,有人把几十个广告域名一口气写进hosts,后来发现某些正常网站也打不开了,就是因为误伤了共用的CDN域名。
hosts文件屏蔽网站怎么恢复
如果之前用hosts屏蔽了某个网站,现在想恢复访问,处理起来很简单。
打开hosts文件,找到对应域名那一行,整行删除,或者在行首加上#号注释掉,保存文件,以Windows为例:
# 127.0.0.1 www.blocked-site.com
保存后刷新DNS缓存(Windows执行ipconfig /flushdns,macOS执行sudo dscacheutil -flushcache),如果浏览器还打不开,清除浏览器缓存或换成无痕窗口试试。
多数情况下,删除或注释掉记录就能恢复,但有一种例外:如果广告拦截软件或安全工具也同时修改了hosts,需要到对应软件里关闭相关规则,否则光改hosts文件没用。
hosts文件和DNS服务器哪个优先?解析顺序与限制
很多人搞不清hosts文件和DNS服务器到底哪个先起作用,答案很明确:本机hosts文件的优先级高于远程DNS服务器。
但这并不意味着你改了hosts就一定能覆盖一切,实际解析顺序大致如下:
| 解析环节 | 优先级 |
|---|---|
| 浏览器/应用自身DNS缓存 | 最高 |
| 系统DNS缓存 | 高 |
| 本地hosts文件 | 中高 |
| 远程DNS服务器 | 低 |
所以一旦浏览器缓存了旧结果,就可能出现“改了hosts却没反应”的错觉,清缓存、重启应用是最直接的解决办法。
hosts文件本身也有不少限制,使用前需要心里有数:
- 只支持精确域名匹配,不支持通配符,.example.com这种写法无效
- 每条记录只能指向一个IP,无法做负载均衡或故障切换
- 文件被恶意软件篡改后,可能把银行、电商域名指向钓鱼网站
- 条目过多时维护困难,几百上千条后打开和编辑都会变慢
- 不同操作系统路径和格式略有差异,跨平台脚本需要注意换行符
据工信部公开的网络安全提示,篡改hosts文件曾是恶意程序劫持流量的常见手段之一,保持hosts文件简洁、定期检查异常条目,是个人电脑和服务器的基础安全习惯。
hosts文件看似只是一个没有扩展名的系统文件,但它在本地域名映射、开发调试、内网访问和网站屏蔽这些场景里,依然是成本最低、见效最快的工具,只要摸清每个系统的路径和刷新命令,再避开格式、缓存和权限这些坑,用它来临时调整域名解析非常顺手。
Q&A
hosts文件修改后需要重启电脑吗?
不需要,Windows刷新DNS缓存、Linux重新读取hosts、macOS清缓存后,多数应用都会立即读取新记录,个别长时间运行的浏览器或客户端程序可能需要重启才能丢弃内部缓存。
hosts文件支持通配符域名映射吗?
不支持,hosts文件只识别完整的域名条目,像“.test.com”这种写法会被当成无效记录忽略,如果必须使用通配符,可以搭建本地DNS服务器或使用支持通配符的代理工具。
hosts文件路径在哪里?不同系统一样吗?
不一样,Windows路径是C:WindowsSystem32driversetchosts,Linux路径是/etc/hosts,macOS路径是/private/etc/hosts,但macOS也兼容/etc/hosts这个软链接,每个系统的文件格式和权限要求略有区别。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/671781.html




