服务器Hosts文件配置教程:域名解析指向与生效验证
在服务器上配置 Hosts 文件,本质是绕过 DNS 服务器,把某个域名直接写死到指定 IP。
它适合测试环境域名指向、内网服务访问、临时切换服务器 IP 等场景,修改后立即对当前机器生效,不影响其他机器。
下面按准备、操作、避坑、验证的顺序讲清楚。
先确认你要改的是哪台机器
Hosts 文件是本地文件,谁改谁生效。
你需要先明确:是让服务器自己解析某个域名,还是让访问者的电脑解析。
只有改对应机器上的文件才有用。
Linux 和 macOS 的路径是 /etc/hosts,Windows 是 C:\Windows\System32\drivers\etc\hosts。
改之前先备份,出问题能快速还原:
# Linux / macOS 备份
cp /etc/hosts /etc/hosts.bak
Windows 可以用文件管理器复制一份 hosts 为 hosts.bak。
修改 Hosts 并写入解析记录
Hosts 的格式是一行一条记录,IP 在前,域名在后,中间用空格或 Tab 分隔,# 开头是注释。
Linux 下用编辑器打开(需要 root 权限):
sudo vim /etc/hosts
在文件末尾追加,例如把 api.example.com 指向 10.0.0.5:
# 测试环境 API 指向
10.0.0.5 api.example.com
# 一个 IP 可以对应多个域名
10.0.0.5 api.example.com www.example.com
保存后无需重启服务,Linux 一般立即生效。
Windows 需要用管理员身份打开记事本,再打开 hosts 文件编辑,否则保存会提示权限不足。
如果只是临时测试,可以用一条命令追加,避免手动编辑:
echo "10.0.0.5 api.example.com" | sudo tee -a /etc/hosts
让改动真正生效的几种情况
Linux 上 Hosts 通常即时生效,但有些程序会缓存解析结果,需要处理:
- 用
getent hosts api.example.com查看系统解析结果。 - 如果程序仍走旧 IP,重启该程序或清理其自带缓存。
- 使用 systemd-resolved 的系统可执行
sudo systemctl restart systemd-resolved刷新。
Windows 修改后要刷新 DNS 缓存:
ipconfig /flushdns
浏览器自身也有缓存,测试时建议用无痕窗口或换一个域名验证。
常见问题与避坑
改完不生效:先确认改的是不是当前机器的 Hosts,再用 getent hosts 或 ping 看解析结果。
如果解析对但服务连不上,问题在端口或防火墙,不在 Hosts。
权限不足保存失败:Linux 必须用 sudo,Windows 必须用管理员身份运行编辑器。
格式写错:IP 和域名之间要有空格,不能写成 10.0.0.5:80 api.example.com,端口不写在这里。
域名不要带 http://。
误删原有记录:系统默认的 127.0.0.1 localhost 等行不要删,删除可能导致本机名称解析异常。
多台机器不一致:Hosts 只影响本机,集群环境要在每台机器分别配置,否则会出现部分节点解析不一致的问题。
生产环境慎用:Hosts 是写死的解析,IP 变更后容易忘记更新,建议只在测试或临时切换时使用,长期方案仍应走 DNS。
验证是否配置成功
配置完成后按下面顺序验证:
- 查看当前解析:
getent hosts api.example.com,输出应为你写入的 IP。 - 用
ping api.example.com确认解析目标正确。 - 用
curl -I http://api.example.com看是否能正常返回响应头。 - 如需恢复,把备份文件覆盖回去:
sudo cp /etc/hosts.bak /etc/hosts。
只要解析结果显示的是你写入的 IP,就说明 Hosts 配置已经生效。
后续遇到访问异常,优先区分是解析问题还是网络与服务问题,能省下大量排查时间。