能否在AWS为Elastic Beanstalk各环境配置独立子域名CNAME?
多子域名映射到Elastic Beanstalk不同环境:可行!附故障排查方案
当然可行!这是Elastic Beanstalk(EB)的常规用法之一——很多团队都会把生产(www)、预发布(staging)、演示(demo)这类环境,通过不同子域名绑定到同一EB应用的不同环境上。你已经走对了第一步(配置CNAME记录),www能正常访问说明整体逻辑没问题,剩下两个子域名出问题大概率是细节配置没跟上,咱们一步步排查:
排查步骤
1. 先确认CNAME解析是否真的生效
别光看路由53的配置,实际验证解析结果才靠谱:
- 用命令行工具
nslookup staging.example.com或者dig demo.example.com,检查返回的目标地址是不是和对应EB环境控制台里的环境域名完全一致(比如staging-your-app.elasticbeanstalk.com)。 - 如果解析结果不对,先检查路由53的CNAME记录是否写错了,有没有多余的空格或者拼写错误。
2. 直接测试EB环境的原始域名
跳过自定义域名,直接访问EB环境自带的elasticbeanstalk.com域名(比如staging-your-app.elasticbeanstalk.com):
- 如果这个原始域名都打不开,那问题出在EB环境本身:检查环境是否部署成功、安全组是否开放了80/443端口、IAM角色权限是否正常。
- 如果原始域名能正常访问,那问题就聚焦在自定义域名和EB的绑定关系上。
3. 关键一步:给EB环境绑定对应子域名
很多人会漏掉这个操作——EB需要明确知道哪个自定义域名对应哪个环境:
- 登录AWS控制台,进入staging环境的配置页面,找到「域名」选项,点击「添加自定义域名」,输入
staging.example.com并确认。 - 对demo环境重复同样的操作,绑定
demo.example.com。 - 这一步完成后,EB才会把对应子域名的请求转发到正确的环境里。
4. HTTPS场景:检查SSL证书覆盖范围
如果你用HTTPS访问,那必须确保:
- 你的SSL证书的「主题备用名称(SAN)」包含所有三个子域名(比如
*.example.com通配符,或者明确列出www.example.com、staging.example.com、demo.example.com)。 - 每个EB环境的负载均衡器(如果用的是负载均衡器环境类型)都配置了这个证书,并且监听了443端口。
5. 等待DNS缓存刷新
如果刚修改完CNAME记录,可能存在DNS缓存的问题:
- 路由53默认的TTL是300秒(5分钟),可以适当缩短TTL(比如60秒)来加速生效。
- 用
dig +trace staging.example.com命令追踪解析路径,确认最新的CNAME记录已经被全球DNS节点更新。
总结
按照上面的步骤排查,基本能解决问题。核心逻辑就是:CNAME解析指向正确的EB环境域名 + EB环境绑定对应的自定义域名 + (HTTPS场景)SSL证书覆盖所有子域名,三者缺一不可。
内容的提问来源于stack exchange,提问作者tim_xyz
相关产品推荐
相关产品推荐

