域名解析改了,服务器也换了 IP,本地却还一趟趟往老地址跑,浏览器转圈转到你怀疑人生——这种“我明明改过”的场面,很多跟服务商没半点关系,是缓存还赖在自己机器里。dns缓存清理指令就那么几条,真不用背一整页笔记,记住三条,Windows、macOS、Linux 大体都能应付,剩下的都是边角料。麻烦的是,多数人敲完指令发现没效果,就以为指令错了,其实是清错了地方。

先分清是哪一层在缓存,不然指令敲了也白敲
缓存这事儿,位置比指令重要。最里层是浏览器自己,Chrome、Edge 这些都有独立的 host 缓存;往外一层是操作系统,Windows 有 DNS Client 服务,Linux 上多是 systemd-resolved 或者 nscd;再往外是你家路由器,不少路由器专门做 DNS 代理,自己也存一份;最外面是运营商和公共 DNS 的递归服务器,8.8.8.8、223.5.5.5 这类。你在本机敲指令,动的只是第二层,别处该等 TTL 就得等。搞不清这个层次,就容易出现“清了八百遍还是老 IP”的崩溃现场,然后开始怀疑人生怀疑主机商。
dns缓存清理指令,三条覆盖常用系统
Windows 上就一条,命令提示符或者 PowerShell 里敲 ipconfig /flushdns,回车看到“已成功刷新 DNS 解析缓存”就算完事。这条不需要管理员权限,普通窗口就行。想看看缓存里到底存了什么,用 ipconfig /displaydns,一屏一屏的记录,哪个域名指向哪个 IP 一目了然。有些机器被优化软件把 DNS Client 服务关了,刷新时会提示失败,去服务列表里把 DNS Client 启回来再敲一次。另外系统自带的 DoH 要是开着,浏览器和系统各走一套,两边都得看。
macOS 分版本,现在能碰到的基本都是这一条:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder。两条命令,一条清目录服务缓存,一条给 mDNSResponder 发信号让它重读,少敲一条效果就打折。更老的系统(10.6 到 10.9 那批)只需要 sudo killall -HUP mDNSResponder,10.5 及以前是 lookupd -flushcache,如今基本见不到了。敲完什么提示都没有,别以为没生效,macOS 一贯这个脾气,想验证就直接访问域名看结果。
Linux 得看发行版,也看有没有装本地缓存服务。用 systemd-resolved 的(Ubuntu 桌面和不少云主机镜像默认开着),命令是 sudo resolvectl flush-caches,老一点的 systemd 版本叫 systemd-resolve –flush-caches;想确认清没清掉,sudo resolvectl statistics 看一眼 cache size 那行。跑 nscd 的机器:sudo systemctl restart nscd,或者 nscd -i hosts 只清 hosts 表。用 dnsmasq 做本地解析的(路由器、小服务器上很常见):sudo systemctl restart dnsmasq。三条别混着敲,敲错了顶多报个 command not found,倒也不会把系统搞坏。
浏览器那一层,系统指令管不着
系统缓存清干净了,浏览器不一定买账。Chrome 和 Edge 以前有个 chrome://net-internals/#dns 页面,点一下 Clear host cache 就清;新版本里这个入口被挪走或者简化了,具体还在不在,以你手上那个版本的实际情况为准。Firefox 在 about:networking#dns 里能看也能清。最省事的办法是把浏览器彻底退干净再打开——注意是退进程,不是关窗口,Windows 任务管理器里还挂着的 chrome.exe 得一起结束,不然它守着内存里那张表,你怎么清都没用。
本地清了上游还留着,这才最气人
本机清完,解析还是老地址,那多半卡在上游。递归 DNS 服务器按记录的 TTL 缓存,你改完 A 记录,人家没到期就是不改口。TTL 设成 600 是十分钟,设成 86400 就是一天。改记录之前先把 TTL 调小,等旧 TTL 过期再改值,能省掉一大半“怎么还不生效”的扯皮。要验证也简单:dig 你的域名 @8.8.8.8 和 dig 你的域名 @223.5.5.5 对比一下,两家结果不一样,说明是缓存没同步,不是配置写错了。接了 CDN 的站点还要多一层,节点缓存和回源地址是两码事,具体刷新方式以服务商控制台说明为准。
hosts 和代理,是两个惯犯
还有个特别容易被忘的地方:hosts 文件。Windows 在 C:\Windows\System32\drivers\etc\hosts,Linux 和 macOS 在 /etc/hosts。当初为了本地测试随手写了条内网 IP 的映射,测完忘了删,后面怎么清 DNS 缓存都不好使——它压根不走 DNS 查询这一步。另一类是代理和加速工具,有些会在本地起一个端口接管解析,你系统里清得再干净,流量还是从它那儿走。排查的时候把这些临时关掉再试,能少绕很多冤枉路。
该清和不该清,心里有个数
什么时候该敲这几条指令:换服务器 IP、站点迁移、解析记录改了值、接 CDN 后调回源地址、本地开发环境来回切。什么时候别把它当万能药:网站打不开、时通时不通,先看 ping 和 curl 通不通,再看端口和防火墙,DNS 缓存只是其中一环,一味清缓存容易把真正的问题盖过去。个人习惯是,改完解析先等几分钟,用另一个网络(手机热点最方便)验一次,两边结果一致了再回本地清缓存,顺序反了容易自己骗自己。
三条指令摆在这儿:Windows 的 ipconfig /flushdns,macOS 的 dscacheutil 配 killall 组合,Linux 的 resolvectl flush-caches。抄进自己的笔记,下次再遇上“改了不生效”,按顺序过一遍——本机缓存、浏览器、hosts、上游递归。四步走完还在原地,那问题多半不在缓存上,别在一条路上死磕,换个方向看日志更实在。
【版权声明】:本站内容若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!