让我先交代一下背景:上周帮一个刚入门的朋友配域名DNS,我以为十分钟能搞定,结果我们对着屏幕搞了1个半小时,因为他买的阿里云域名,DNS却在Cloudflare托管,然后还配了个CNAME解析到GitHub Pages,结果死活不生效。经历了那晚的折腾,我得把这个踩坑经验写出来。
先搞清楚:域名和DNS到底干啥的?
简单说,域名就是你网站的“门牌号”,DNS就是“导航系统”。你买下域名,只是拿到了门牌,要让别人能访问到你的网站,还得在DNS上指路。这就是为啥很多人说“我买了域名,为什么还打不开网站”。
开篇配图:一张图示展示域名解析流程,从浏览器输入域名到DNS服务器查询再到服务器返回IP,标注“用户-A域名-DNS缓存-B服务器-最终访问流程”。
第一步:选DNS服务商,别被官方绑定套路
我最初用阿里云的域名,它默认让我用阿里云的DNS。听起来没错,但问题是阿里云的DNS在国内访问快,国外用户访问可能会有延迟。后来我把DNS托管到Cloudflare(免费版就行),好处是两个:
- 全球CDN加速
- 自带DDOS防护和SSL证书
怎么迁移?看操作:
“bash
在Cloudflare添加站点
它会自动抓取你现有的DNS记录
然后去阿里云域名控制台,把Name Servers改成Cloudflare给的
示例:ns1.cloudflare.com, ns2.cloudflare.com
验证是否生效,用dig命令
dig yourdomain.com NS +short
正常输出应该是:ns1.cloudflare.com ns2.cloudflare.com
`
这里有个坑:改完Name Servers后,一般2-24小时内生效。我当时以为马上能访问,结果等了6小时才完全切换成功。官网说“几分钟”,实际测试可能要半天。
另外,如果你想把根域名(比如example.com)指向GitHub Pages,不能用CNAME,得用A记录指向GitHub Pages的IP地址(比如185.199.108.153这些)。根域名不支持CNAME,这是常见踩坑点。
核心配置:A记录、CNAME、MX记录怎么配?
先看常见的三种记录类型:
A记录
这是最基础的,把你的域名指向一个IP地址。比如你把example.com指向203.0.113.10。
CNAME记录
别名记录,把域名指向另一个域名。比如你用GitHub Pages,就配CNAME到yourname.github.io。注意,根域名不能用CNAME,得用A记录或ALIAS/ANAME记录(如果你的服务商支持)。
MX记录
邮箱记录,指向邮件服务器。
我踩的一个坑:有个站点既要绑邮件(MX记录)又要绑网站(A记录),但我想用CNAME让主域名指向另一个地方。结果邮件丢了,因为CNAME和MX不能共存。这是RFC标准规定的,官方文档文档不够清晰,我没看懂就踩了。
正确做法:用子域名做邮件,比如mail.example.com,用A记录指向邮件服务器。
下面是一份生产环境配置示例:
`yaml
假设我买的是 example.com
主站:www.example.com
API服务器:api.example.com
邮件服务器:mail.example.com
静态资源:cdn.example.com
配置:
A记录:
- "mail.example.com -> 203.0.113.10 (邮件服务器)"
CNAME记录:
- "www.example.com -> example.com (主站别名)"
- "cdn.example.com -> resources.yourcdn.net (CDN加速)"
MX记录:
- "example.com -> mail.example.com, 优先级10 (主邮箱)"
TXT记录:
- "example.com -> v=spf1 include:_spf.google.com ~all (SPF防伪造)"
- "_dmarc.example.com -> v=DMARC1; p=reject; rua=mailto:admin@example.com (DMARC报告)"
`
注意:如果使用邮件服务,建议配置SPF和DMARC记录,否则邮件很可能被标记为垃圾邮件。这个设计真的反人类,但为了防钓鱼邮件,没办法。
核心配图:一张表格对比A记录、CNAME、MX、TXT四种记录类型,列出配置示例、生效时间、适用场景、常见坑。
另一个坑:TTL缓存时间怎么设?
TTL是DNS记录在本地缓存的时间,单位是秒。默认值通常是3600(1小时)。但你做调试时,如果把这个设成3600,改完一次配置,就要等1小时才能看到效果,很烦。
我的建议:
- 调试阶段:设成60(1分钟)
- 上线稳定后:设成3600(1小时)或86400(24小时)
有一次我改了DNS记录,设成60秒,但CDN厂商那边还缓存着旧记录,又等了半小时。这其实是CDN的缓存策略问题,不是DNS TTL的问题。遇到这种情况,得去CDN控制台清一下缓存,或者等它自动刷新。
实战案例:从零配置一个静态博客
假设你在Vercel部署了一个博客,域名叫blog.example.com。
步骤:
)这里有个技巧:用dig命令实时查看DNS解析状态:
`bash
查看blog.example.com的解析
dig blog.example.com CNAME +short
应该输出:blog-xyz123.vercel.app
如果没生效,检查缓存
dig blog.example.com CNAME @8.8.8.8
绕过本地缓存查Google DNS,如果正常,说明是本地DNS缓存问题
如果Google DNS也没生效,那可能是DNS记录没配对或没传播
`
如果dig什么都不输出,说明记录没配对或没生效。我见过有人把CNAME记录写成了A记录,自然不生效。
踩坑总结:三个你很可能遇到的问题
问题1:配置了但访问不了
原因:没等DNS生效,或本地DNS缓存了旧记录。清除方法:
- Windows:ipconfig /flushdns
- Mac:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder
- Chrome:chrome://net-internals/#dns 点“清除主机缓存”
问题2:用了CDN但SSL证书不生效
原因:CDN厂商需要验证域名所有权。不同厂商验证方式不同:如果你用Let's Encrypt,需要在DNS加一条_acme-challenge.example.com的TXT记录;但Cloudflare有自己的SSL验证方式,通常不需要手动加TXT记录,在控制台开启“Full (strict)”模式就行。这一步别跳过,否则只有HTTP能用。
问题3:邮件发不出去
原因:没配SPF或DKIM记录。邮件服务器会拒绝没认证的邮件。配置示例:
`“
TXT记录:example.com -> "v=spf1 mx ~all"
如果用了第三方邮件服务(比如Google Workspace),要把它们的IP段加进去。
总结前配图:一张流程图展示从买域名到配置DNS到站点能访问的完整步骤,标注每个步骤的预估耗时和常见错误。
总结一下,你可以立刻用的三个点
其实配置DNS没那么难,只要搞懂“记录类型+TTL+生效时间”这三个核心概念,剩下的就是等缓存刷新。我踩的坑,你今天就避开了。
本文仅供参考,不构成医疗建议。
本文由AI辅助创作,仅供参考。