Heroku子域名配置故障排查:主应用正常但子域名及自定义域名失效
解决Heroku子域名与自定义域名无法响应的问题
我来帮你一步步排查和解决这个问题,这类域名访问故障通常是配置环节的小疏漏,咱们逐个检查:
1. 先确认Heroku已正确绑定目标域名
首先打开终端,用Heroku CLI查看当前应用的域名配置:
heroku domains --app app-name
你需要确保subdomain.app-name.herokuapp.com和customdomain.xyz(如果有www子域也一起)都出现在返回的列表里。如果某个域名没在里面,赶紧用命令添加:
# 添加Heroku子域名 heroku domains:add subdomain.app-name.herokuapp.com --app app-name # 添加自定义域名 heroku domains:add customdomain.xyz --app app-name
注意:Heroku官方子域名(比如subdomain.app-name.herokuapp.com)不需要额外DNS配置,但自定义域名必须做解析指向。
2. 验证自定义域名的DNS解析是否正确
这是自定义域名访问失败的最常见原因:
- 如果你用的是根域名
customdomain.xyz:要么给它配置CNAME记录指向app-name.herokuapp.com(部分DNS服务商不允许根域名用CNAME,这时就用他们提供的ALIAS/ANAME记录); - 如果是子域名(比如www.customdomain.xyz),直接加CNAME记录指向
app-name.herokuapp.com就行。
配置完后,用命令验证解析是否生效:
# 检查根域名解析 nslookup customdomain.xyz # 或者用dig查看更详细信息 dig customdomain.xyz
确保返回的目标地址和Heroku的主域名一致,如果解析不对,先修正DNS配置,记得DNS生效可能需要十几分钟到几小时,取决于TTL设置。
3. 检查应用的vhost配置是否覆盖所有域名
你的vhost配置必须明确允许所有要访问的域名,不然应用会拒绝请求:
- 如果你用Nginx当反向代理,
server_name行要把所有域名都列出来:server_name app-name.herokuapp.com subdomain.app-name.herokuapp.com customdomain.xyz; - 如果是Node.js/Express这类应用,要确保路由逻辑没有限制只接受主域名的请求,或者用中间件处理所有域名的请求(比如不要在代码里硬写判断请求域名等于主域名才响应)。
- 记住:Heroku会把用户请求的原始域名转发给你的应用,所以你的应用必须能识别并处理这些域名。
4. 确认Heroku的dyno和路由正常运转
先检查web dyno是否在运行:
heroku ps --app app-name
如果看到web dyno的状态不是up,赶紧启动它:
heroku ps:scale web=1 --app app-name
然后查看实时日志,测试访问子域名和自定义域名,看请求有没有到达Heroku:
heroku logs --tail --app app-name
- 如果日志里完全看不到这些请求,说明请求根本没到Heroku,回到第一步检查域名绑定和DNS解析;
- 如果日志里有请求但返回404或5xx错误,那就是应用内部的vhost或路由配置有问题,再仔细核对第三步。
5. 检查SSL证书(如果启用了HTTPS)
如果你的域名启用了HTTPS(Heroku默认给自定义域名提供Let's Encrypt证书),先确认证书状态正常:
heroku certs --app app-name
如果证书状态不是OK,尝试重新启用自动证书:
heroku certs:auto:enable --app app-name
证书问题会导致浏览器直接拒绝连接,或者访问时出现SSL错误。
内容的提问来源于stack exchange,提问作者Chukwuemeka
相关产品推荐
相关产品推荐

