A记录填IP,CNAME填另一个域名——就这一句,能解决八成的困惑。但真要动手,麻烦通常出在细节上:有人在裸域上加了条CNAME,结果邮箱当天就不收信了;有人换了服务器只改了A记录,本地刷新半天还是老页面,以为机房出问题,其实是自己电脑缓存没散。域名解析是什么意思,A记录和CNAME一次分清,这篇就把这两条记录拆开说,顺带把几个踩过不止一次的坑摆出来。

域名解析是什么意思,一句话先说明白
域名解析就是把你记的那个名字,翻译成机器能找到的地址。人记不住一长串数字,机器又不懂www后面跟的那几个字母,中间得有人做翻译。这个活儿由DNS系统干:浏览器先问本地DNS,本地DNS一路往上问,最后拿到一条记录回来告诉你该去哪个IP。整个过程中往返传递的“记录”,就是你在域名后台填的那几行东西。A和CNAME是里面最常用的两条,另外还有MX管收发邮件、TXT放验证信息、AAAA走IPv6,道理都差不多,只是翻译的对象不同。
A记录:直接指到一个IP
A记录干的事很直白,域名对IPv4地址,一行搞定。比如把www指到你自己那台服务器的IP。查一次就到位,中间没有中间人,这就是常说的“最终指向”。
好处是路径短、控制权在你手里,换服务器时改这一行就行,改完通不通立刻能验证。IPv6用的是AAAA记录,逻辑一模一样,只是地址格式换了写法。独立服务器、自己维护的VPS、还有裸域(主机记录填@那条),基本都是A记录在扛。
有个小细节值得提一句:A记录的“记录值”必须是数字点分的地址,不能填域名,也不能带http://这种前缀。有人把网址整段粘进去,面板直接报错,还以为是面板有问题。
CNAME:指向另一个域名,俗称别名
CNAME中文叫别名记录。它不关心IP,只认“另一个名字”。比如查www.example.com,系统告诉你“这事你去问example.某厂商域名”,等于多问一次,最后由那边给出的地址说了算。
好处是别人换了IP你完全不用管。CDN接入、对象存储、第三方SaaS的域名验证、邮箱服务商要求加的那几条记录,基本都是CNAME。对方的地址是弹性的,你今天照着填个IP,明天他那边一调度,你的站就悬空了,这种场景用CNAME才稳。
规矩也有一条:同一个主机记录只能有一条CNAME,不能既CNAME又A。写了别名又写实质地址,DNS查出来的结果是不确定的,各家递归服务器的处理方式可能还不一样,这种“看着能通”的配置最坑人,因为不通的时候找不到规律。
裸域加CNAME,出事往往在邮箱上
主机记录填@的那条,也就是别人直接输example.com访问的那个裸域,加CNAME是要小心的。CNAME不能与其它记录共存,这是RFC里写死的,因为一个名字要么是别名,要么是本体,不能两头都占。裸域上往往还挂着MX和TXT,一旦CNAME生效,这些记录就可能被忽略——发出去的信没回音、SPF校验过不去、验证邮件收不到,症状看着和解析毫无关系。
有的DNS服务商提供CNAME拉平(flattening)或者ANAME一类的做法,解析时把别名转成一条地址返回,能绕开这个限制,但各家实现不一样,行为也有差异,用之前以服务商文档或官方页面说明为准。少数服务商干脆不允许在裸域保存CNAME,这不是限制你,是在替你挡灾。
另一个常见的:CNAME链套太多层。A指向B,B指向C,C再指回A,或者三四层串下来,排查的时候一层一层问下去极其费劲。CDN给了你一个CNAME目标,直接填上就好,别自己在前面再套一层自己的别名,看起来整齐,实际上只是多一次查询、多一个可能出错的地方。
改完不生效,先别急着骂服务商
TTL缓存、本地DNS、浏览器、系统hosts,四层都可能把旧结果留着。排查顺序建议从命令行开始,别拿浏览器刷新当验证手段。
Linux和macOS上直接dig:`dig www.example.com A +short`看A记录,`dig www.example.com CNAME +short`看别名,`dig @8.8.8.8 www.example.com`可以指定公共DNS绕过本地缓存。Windows上用`nslookup www.example.com`,想换服务器就`nslookup www.example.com 8.8.8.8`。第三方在线查询工具也行,多换几个节点看,各地结果不一致,多半就是缓存还没过期。
如果打算换服务器,稳一点的做法是提前把TTL调小,等旧TTL自然过期之后再改记录值,这样切换窗口能压得很短。临时改完再想调TTL是没用的,缓存里存的还是老值。这个动作要提前做,抱佛脚抱不上。
到底该填哪个,一句判断就够
目标给你的是IP、而且这个IP你有控制权——用A记录。目标给你的是个域名(CDN、第三方平台、负载均衡、各种验证)——用CNAME。拿不准就直接问对方要“解析配置说明”,以对方给的为准,别自己推断。
数量少的时候两者差别不大,A记录改动更直接,CNAME少一点维护。等子域多到几十上百个,尤其是都挂在同一个入口后面的时候,CNAME的价值就显出来了:一处改,全跟着变。
几个容易忽略的小地方
主机记录填@表示裸域,填www表示www前缀,填*是泛解析。泛解析会把所有没单独配置的子域都兜住,做测试挺方便,但上线后要留意别把不存在的子域也指到生产环境,爬虫抓到一堆重复内容就不好玩了。
记录值结尾那个点,有的后台要带有的不要,跟着面板提示填就行。域名本身不要写成带协议的网址。改完之后先dig验证,确认权威DNS返回的是你刚填的值,再去看浏览器——浏览器缓存和DNS缓存是两码事,混在一起排查容易把自己绕进去。
还有一条,解析记录改完不是立刻全球生效,各地递归服务器按自己的TTL过期,快慢不一。着急的话多查几个节点,心里有数就行,别每十分钟改一次记录,改来改去反而更难收敛。
下次再遇到站点打不开,第一步先dig一下,看清楚是记录没生效、指错了地方,还是服务器本身的问题。A和CNAME分清了,MX、TXT、AAAA这些顺着看一遍也就懂了。填之前多看一眼前面板上的提示,比事后到处问人省事得多。
【版权声明】:本站内容若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!