Heroku部署Node应用自定义域名无法正常访问求助
Hey there, let's work through this issue step by step—this is a common gotcha with Heroku + Namecheap domain setups, so I’ve got some solid fixes for you.
1. 先排查Heroku的域名绑定配置
First things first: make sure you’ve properly added your custom domain to your Heroku app. Here’s what to check:
- Go to your Heroku app’s Settings tab, scroll down to the Domains section.
- You should see both your root domain (e.g.,
domain.com) and subdomain (e.g.,www.domain.com) listed here. When you add each domain, Heroku will generate a unique DNS target (likexxxx.herokudns.com). Double-check that the CNAME records you’re adding in Namecheap point exactly to these generated targets—not a manually typed one. - Don’t skip the domain verification step! Heroku might ask you to add a TXT record to Namecheap to confirm ownership. If this isn’t done, Heroku won’t route traffic from your custom domain to your app.
2. 理清Namecheap CNAME记录的自动句号问题
那个Namecheap自动给CNAME目标加上的末尾句号不是bug——这是DNS的标准规范!完全合格域名(FQDN)需要用末尾句号来标记域名的结束,所以你不用手动删除它,这是DNS正常的工作逻辑。
但这里有个很多人会踩的坑:根域名(domain.com)不能用CNAME记录。CNAME记录会覆盖所有其他DNS记录(比如用于邮件的MX记录),而且包括Namecheap在内的大多数DNS服务商,都不支持在根域名上正确配置CNAME。正确的做法是:
- 对于根域名(在Namecheap的DNS设置里用
@表示),使用ALIAS或ANAME记录(Namecheap现在支持根域名的ALIAS记录,添加记录时选择ALIAS类型,指向Heroku生成的根域名目标即可)。 - 对于
www子域名,使用CNAME记录指向Heroku生成的www目标(末尾带句号完全没问题)。
3. 诊断DNS解析与记录正确性
即使已经等了两天,还是值得验证你的DNS记录是否正确传播。在终端运行以下命令来检查:
- 根域名:
dig domain.com ALIAS(如果临时用了CNAME就运行dig domain.com CNAME) - www子域名:
dig www.domain.com CNAME
输出结果应该显示你从Heroku设置里复制的准确目标地址,并且带末尾句号。如果不是这样,重新检查Namecheap的记录设置——可能是你输错了目标地址,或者记录没有保存成功。
4. 修复“尚无内容”的跳转问题
跳转到domain.com.herokudns.com并显示空白页面,是因为Heroku没有把你的自定义域名请求和你的应用关联起来。试试这些修复步骤:
- 从Heroku应用里删除现有的域名条目,然后重新添加。这会生成新的DNS目标,能解决一些残留的关联错误。
- 更新Namecheap的记录后,等待10-15分钟让DNS变更传播(即使之前等了几天,新的变更可能需要一点时间生效)。
- 再次访问你的域名——如果还是跳转,清除浏览器缓存并尝试隐身模式,缓存的DNS数据可能导致旧跳转持续生效。
最后补充一点:你访问带末尾句号的目标时网站能正常加载,这说明Heroku的目标本身是有效的——问题肯定出在DNS路由或者Heroku的域名绑定上,和你的应用代码无关。
内容的提问来源于stack exchange,提问作者thedankoe

