Linux系统中配置hosts文件是修改本地域名解析映射的最直接、最轻量的方案,其核心操作就是编辑 /etc/hosts 文件并添加“IP地址 主机名”的记录,正确配置hosts文件可以实现域名定向劫持、绕过DNS污染、加速内网访问、屏蔽恶意站点,但必须注意格式规范与优先级规则,否则会导致服务无法访问或解析异常。
理解hosts文件的本质
Linux的hosts文件是一个纯文本文件,位于 /etc/hosts,优先级高于DNS服务器,当系统发起域名解析请求时,会先查询hosts文件,若找到匹配记录则直接使用,不再向外部DNS发起请求,这一机制决定了它既能成为高效工具,也可能成为故障源。
默认hosts文件内容类似:
0.0.1 localhost localhost.localdomain
::1 localhost ip6-localhost ip6-linux
其语法极其简单:
IP地址 主机名 [别名...]
- IP地址可以是IPv4或IPv6。
- 主机名与IP之间用空格或制表符分隔。
- 一行只能对应一个IP,但可以映射多个主机名。
- 以 开头的行是注释。
核心配置方法与典型场景
手动编辑hosts文件的步骤
使用任意编辑器(如vim、nano)打开文件:
sudo vim /etc/hosts
在文件末尾追加记录,
168.1.100 gitlab.example.com 203.0.113.10 blog.example.org
保存退出后立即生效,无需重启网络服务,部分系统应用程序(如浏览器)可能有自身缓存,但操作系统层面的解析已更新。
永久生效与临时生效的区别
- 临时生效:直接用
echo "IP domain" >> /etc/hosts追加,或使用getent hosts domain验证。 - 永久生效:只要不删除记录,重启后仍然存在,hosts文件本身不依赖网络服务,因此对宕机、断网环境同样有效。
通过hosts实现内网服务映射
在企业或开发环境中,内网服务器往往没有公网DNS记录,此时配置hosts可以快速让本地机器识别内网主机名:
0.0.5 jenkins.internal
10.0.0.6 registry.internal
优势在于零运维成本,无需自建DNS服务器,适合小规模集群或临时联调。
屏蔽恶意域名
将恶意域名解析到本机回环地址:
0.0.1 tracking.example.com
0.0.0.0 ad.example.net
这样访问这些域名时会连接到本机无效端口,请求即超时失败,达到屏蔽效果,注意 0.0.0 在某些系统上可能被特殊处理,建议统一使用 0.0.1。
注意hosts文件权限与安全
/etc/hosts 通常属于root用户,普通用户无写权限,编辑时必须使用sudo,配置不当可能导致:

- 域名指向错误IP,服务访问失败。
- 注释符误放导致记录失效。
- 行末多余空格或Tab符引发解析异常。
因此每次修改后,务必用 getent hosts 域名 或 ping 域名 验证结果。
经验案例:结合云主机快速搭建开发环境
在使用酷番云Linux云服务器时,经常遇到需要将多个测试域名指向同一台服务器的场景,我在一台酷番云服务器上部署了三个独立站点,但尚未正式备案或配置DNS解析,此时我直接在服务器的hosts文件中写入:
0.0.1 test1.example.com
127.0.0.1 test2.example.com
127.0.0.1 test3.example.com
然后在Nginx配置中,将这三个server_name都监听在80端口,通过Host头区分不同站点,由于hosts解析优先,本地curl或浏览器直接访问 http://test1.example.com 就能命中对应站点。这比临时修改Nginx配置或使用PHP内置服务器更加直观,也避免了反复更换--host参数的麻烦。
这个方案特别适合在购买酷番云服务器后的初始化阶段:先配好hosts映射,让本地开发机直接通过域名访问云主机上的中间版本,等正式域名解析生效后再删除hosts记录,实现无缝切换,整个过程耗时不到一分钟,却大幅提高了联调效率。
相关问答
修改/etc/hosts后为什么不生效?

可能的原因有三个:
- 修改的文件不对:请确认是
/etc/hosts,而不是用户目录下的~/.hosts,后者不会被系统读取。 - 优先级问题:某些应用(如Chrome)启用了DNS over HTTPS(DoH),会绕过系统hosts解析,需要在浏览器设置中关闭“使用安全DNS”功能。
- 缓存问题:部分服务(如systemd-resolved)会缓存解析结果,但hosts文件是即时读取的,如果使用nscd服务,可以执行
sudo systemctl restart nscd清空缓存。 - 格式错误:检查是否有多余空格、注释符位于行首,以及IP后面是否紧跟主机名。
hosts文件与DNS服务器冲突时,谁生效?
hosts文件优先,这是Linux系统默认的解析顺序(NSS配置 /etc/nsswitch.conf 中 hosts: files dns),也就是说,只要hosts中存在对应域名记录,就不会查询外部DNS,如果希望某条记录临时绕过DNS,添加hosts即可;如果希望某条记录恢复使用DNS解析,删除该行即可,需要注意的是,部分现代发行版(如Ubuntu 18.04以上)使用systemd-resolved服务,其解析流程可能略有差异,但最终仍遵循 nsswitch.conf 中定义的顺序,一般默认仍是files优先。
您在实际配置中遇到过哪些奇怪的问题?欢迎在评论区留言交流,我看到后会第一时间回复。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/794849.html


评论列表(3条)
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于解析的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
这篇文章写得非常好,内容丰富,观点清晰,让我受益匪浅。特别是关于解析的部分,分析得很到位,给了我很多新的启发和思考。感谢作者的精心创作和分享,期待看到更多这样高质量的内容!
这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是解析部分,给了我很多新的思路。感谢分享这么好的内容!