AWS CloudFront配置问题:境外无法访问站点(ERR_NAME_NOT_RESOLVED)
域名解析与AWS配置错误排查
问题描述
本地可正常访问部署在AWS Elastic Beanstalk的NodeJS/React站点,HTTP转HTTPS、www转主域名重定向均正常;但开启德国、美国、罗马尼亚VPN后,主域名domain.com与www.domain.com均无法访问,报错ERR_NAME_NOT_RESOLVED。
部署配置细节:
- 已获取SSL证书,负载均衡器配置HTTP转HTTPS规则;
- Route53中配置了默认NS记录(已关联Google Domains)、SOA记录,以及指向Elastic Beanstalk的A类别名记录(
domain.com); - www重定向配置流程:
- 创建名为
www.domain.com的S3桶,取消“阻止所有公共访问”,开启静态网站托管,设置重定向至domain.com(HTTPS协议); - 添加桶策略赋予公共读取权限(策略代码如下);
- 创建CloudFront分发,源域名为S3桶网站端点,设置Viewer协议策略为HTTP转HTTPS,绑定自有SSL证书,添加
www.domain.com为备用域名; - 在Route53创建指向该CloudFront分发的
www.domain.com别名记录,已等待12小时。
- 创建名为
用户提供的S3桶策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadgetObject", "Effect": "Allow", "Main": "*", "Action": "s3: GetObject", "Resource": "arn:aws:s3:::MY_BUCKET_NAME/*" } ] }
配置错误分析
1. DNS解析核心问题(直接导致ERR_NAME_NOT_RESOLVED)
- NS记录同步不完整:需确认Google Domains的域名服务器设置是否完全匹配Route53托管区提供的4条NS记录。本地能访问大概率是本地DNS缓存了旧解析记录,而VPN环境使用的外部DNS无法获取到正确的Route53 NS地址,导致域名解析失败。
- Route53托管区有效性:检查Route53的托管区是否针对
domain.com创建,且托管区状态正常。若托管区未与域名正确关联,全球DNS服务器无法获取到你的解析记录。
2. S3桶策略语法错误
桶策略存在两处语法错误,会导致权限配置失效:
- 字段名称错误:
"Main": "*"应为"Principal": "*",Principal是S3策略中指定授权对象的标准字段; - 动作名称格式错误:
"s3: GetObject"中的空格需删除,改为"s3:GetObject",AWS IAM动作名称不允许包含空格。
修正后的桶策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicReadgetObject", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::www.domain.com/*" } ] }
3. CloudFront与S3源配置细节问题
- S3源端点选择错误:创建CloudFront分发时,必须选择S3静态网站托管的端点(格式通常为
www.domain.com.s3-website-<区域>.amazonaws.com),而非S3桶的REST API端点。选错端点会导致CloudFront无法正确获取重定向内容。 - SSL证书覆盖范围:确认绑定的SSL证书同时包含
domain.com和www.domain.com(或使用通配符证书*.domain.com),否则后续会出现SSL握手错误。
4. Route53记录配置细节
- 主域名A记录类型:Route53中指向Elastic Beanstalk的记录,需选择别名记录并直接关联到EB环境,而非手动输入EB的域名。确保别名目标选择正确的EB环境资源,避免解析指向错误。
- www记录的别名目标:确认Route53中
www.domain.com的别名记录是直接指向CloudFront分发的资源,而非手动输入CloudFront的域名,防止解析链路中断。
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

