hosts改了不生效,DNS缓存、格式编码、权限三处挨个查
办公里用 hosts 的场景不少:开发联调要把域名指到测试机、内网系统要绑个内部域名、还有人拿来屏蔽弹窗广告。共同点是操作都很简单——打开 C 盘那个 hosts 文件,加一行,保存。然后问题来了:浏览器一刷新,走的还是老地址,域名解析压根没变。明明改了,为什么不生效?因为 hosts 从「改完」到「生效」中间隔着三道坎,哪一道没过,你的修改都等于没改。
第一道坎:系统还缓存着旧账
改 hosts 之前,系统早就把一堆域名解析结果存在 DNS 缓存里了。你改了文件,缓存不知道,浏览器一问,系统直接把旧答案递过去。所以第一动作永远是刷缓存:管理员打开命令行,执行 ipconfig /flushdns,然后把浏览器彻底关掉重开(浏览器自己还有一层缓存)。大部分「不生效」到这一步就解决了;没解决,往下查。
第二道坎:文件格式不对,系统认不出来
hosts 文件的规矩很死:一行一条记录,格式是「IP 地址 空格 域名」,注释用井号开头,IP 和域名之间用空格或制表符都行,但多打一个标点、少打一个点都不行。除了内容,编码也要对——ANSI 或不带 BOM 的 UTF-8 才是它认的,有些编辑器保存时自作主张带上 BOM 或者换成别的编码,第一行就可能被整个忽略。还有一个容易忽视的点:这个文件没有扩展名。如果编辑器保存成了 hosts.txt,那系统读的还是原来那份,你改的是个「假文件」。检查完格式,保存,再刷一次缓存试试。
第三道坎:权限和文件本身出了状况
hosts 位于系统目录,普通权限经常改不动或者改完保存不了,要用管理员身份运行编辑器再改。再深一层,还有两种少见但真实存在的情况:一是安全软件把 hosts 接管保护了,你的修改被悄悄还原;二是文件本身损坏甚至丢失。丢失也有救——Windows 在系统组件存储里留了一份原始副本,可以从那里复制一份回来重建,文件位置和文件名照旧,比网上重新下载靠谱。
验证要闭环
改完之后别凭感觉刷网页,直接 ping 一下你写的域名,看解析出来的 IP 是不是 hosts 里那一行。是,说明链路通了;不是,回到三道坎继续查。贵州诚鑫致达科技承接办公网运维时,联调环境的 hosts 修改有一套固定核对动作:改前备份、改后刷缓存、ping 验证闭环,三步走完才交给开发用——小小的 hosts,配上纪律才省心。你上次改 hosts 是为了什么?评论区聊聊。