在本地开发或测试环境中,我们经常需要把一个域名指向本机或者其他指定的IP地址,比如让www.test.local直接指向127.0.0.1,这样就不用每次在浏览器里输入冗长的地址加端口号。在Mac系统上,这件事通过修改hosts文件就能实现,整个过程不需要安装任何第三方软件。不过hosts文件属于系统级文件,普通权限无法直接保存,不少人第一次操作时会卡在权限问题上,本文把完整流程和常见坑点一次讲清楚。

一、hosts文件是什么以及它在Mac上的位置
hosts文件是操作系统层面提供的一个本地域名解析配置文件,它的优先级高于DNS服务器。也就是说,当你在浏览器访问一个域名时,系统会先查hosts文件里有没有对应的映射记录,如果有就直接使用这个IP,完全不会再走DNS解析。正因如此,hosts文件常被用于本地开发调试、屏蔽广告域名、切换测试环境等场景。
在Mac系统中,hosts文件位于/etc/hosts路径下。你可以在终端中通过以下命令查看它的内容:
cat /etc/hosts
默认情况下,文件内容大致如下:
## # Host Database # # localhost is used to configure the loopback interface # when the system is being booted. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost
需要特别说明的是,/etc/hosts实际上是一个指向/private/etc/hosts的符号链接,两个路径指向同一个文件,修改任意一个即可。文件中每一行代表一条解析记录,格式为「IP地址 空格 域名」,一行可以写多个域名,域名之间用空格分隔。以井号开头的行是注释行,不会被系统解析。
二、Mac修改hosts文件的详细步骤
由于hosts文件的所有者是root用户,直接双击打开修改是无法保存的,必须借助管理员权限。下面给出使用终端编辑的完整流程,推荐使用系统自带的vim或nano编辑器。
第一步,打开终端(可以通过启动台搜索「终端」,或按下Command加空格调出聚焦搜索后输入terminal),执行以下命令:
sudo vim /etc/hosts
输入命令后系统会提示输入密码,这里输入的是你当前Mac账户的登录密码,输入过程中屏幕不会显示任何字符,属于正常现象,输完直接按回车即可。
第二步,在vim中按i键进入插入模式,将光标移动到文件末尾,添加你需要的解析记录,例如:
127.0.0.1 www.myproject.local 127.0.0.1 api.myproject.local 192.168.1.100 test.server.com
第三步,按Esc键退出插入模式,然后输入:wq并回车,保存并退出vim。如果你对vim操作不熟悉,可以改用更简单的nano编辑器:
sudo nano /etc/hosts
nano编辑完直接按Control加O保存,再按Control加X退出,界面上有明确的按键提示,对新手更加友好。此外,如果你习惯图形界面,也可以先用其他编辑器改好内容,再用sudo cp命令覆盖回去,但要注意文件权限和换行符格式,Mac上必须使用Unix风格的LF换行符,如果用了Windows风格的CRLF换行符,解析可能会出问题。
三、配置后不生效的排查方法与避坑建议
hosts文件改完却没生效,是最常见的坑。第一个要检查的是DNS缓存,macOS会把解析结果缓存起来,修改hosts后建议立即刷新缓存:
sudo dscacheutil -flushcache sudo killall -HUP mDNSResponder
这两条命令组合可以清空系统的DNS缓存,绝大多数「改了没反应」的情况在执行后就能恢复正常。如果还是不行,可以用ping命令验证解析是否已经切换:
ping www.myproject.local
如果ping返回的IP是你配置的地址,说明系统层面已经生效,此时问题多半出在浏览器自身缓存上,可以尝试清除浏览器缓存或换个浏览器测试。
第二个常见的坑是浏览器强制使用HTTPS。Chrome等现代浏览器在输入域名后会自动尝试HTTPS协议,而本地开发环境往往只有HTTP服务,就会导致连接失败。解决方法有两个:一是在chrome://flags中关闭Always Use HTTPS相关选项,二是干脆给域名使用.localhost后缀,因为.localhost域名默认会解析到本机,甚至不需要写进hosts文件。
第三个坑是权限与文件格式问题。hosts文件不要用记事本类工具随意编辑后覆盖,避免引入BOM头或错误换行符;每条记录的IP在前、域名在后,中间用空格或Tab分隔;域名不要带http协议头,也不要带端口号,端口是访问时才指定的,hosts只负责IP层面的映射。另外,如果配置了大量记录后想批量管理,可以考虑使用Gas Mask这类专门的hosts管理工具,它支持多套配置方案一键切换,适合经常在多套环境之间来回切换的开发者。最后提醒一点,修改hosts后如果访问某些线上网站出现异常,先检查是不是之前测试时把正式域名的解析改掉了,及时删掉多余的测试记录,避免影响日常上网。
四、配置方案怎么选:直接改文件还是用工具管理
对于偶尔改一两条记录的场景,直接用终端编辑/etc/hosts是最轻量的方案,系统自带工具即可完成,没有任何额外依赖。但如果你的工作需要频繁在不同环境之间切换,比如同时维护开发、测试、预发布三套环境,手动改文件就容易出错,也难以追溯每次改动的内容。
这种情况下推荐两种增强方案。第一种是使用Gas Mask或SwitchHosts这类免费工具,它们提供图形界面,支持多套hosts方案管理和快速切换,改动历史也会保留,出错时可以方便地回滚。第二种是自己写一个简单的shell脚本,把常用的配置模板保存成多个文件,需要时用sudo cp一条命令切换,例如:
#!/bin/bash # 用法: ./switch-hosts.sh dev 或 ./switch-hosts.sh prod cp ~/hosts-config/$1 /etc/hosts sudo dscacheutil -flushcache sudo killall -HUP mDNSResponder echo "已切换到 $1 环境并刷新DNS缓存"
无论选择哪种方案,都建议保留一份原始hosts文件的备份,第一次修改前先执行sudo cp /etc/hosts /etc/hosts.backup,万一改乱了可以随时恢复到初始状态。养成这个习惯后,hosts配置就再也不是让人头疼的事情了。
Mac hosts配置域名解析hosts文件修改修改时间:2026-09-02 05:42:30