如何配置Route53子域名重定向至S3托管站点的维护页面
实现子域名重定向至S3主站维护页面的方案
针对你的需求,这里提供两种可行的技术方案,可根据实际架构选择:
方案一:直接利用S3静态网站托管实现重定向
适合不需要对子域名启用HTTPS,或可接受S3默认静态网站域名的场景:
创建匹配子域名的S3存储桶
新建S3存储桶,命名为internal-site.my-web-site.com(S3静态网站要求桶名与域名一致,否则无法直接绑定)。配置S3静态网站重定向规则
进入存储桶「属性」→「静态网站托管」,选择「重定向请求」:- 目标域名填写
my-web-site.com - 协议选择
HTTPS(若主站使用HTTPS,建议保持一致) - 点击「编辑重定向规则」,添加以下JSON规则,将所有请求重定向到维护页面:
[ { "Condition": { "KeyPrefixEquals": "" }, "Redirect": { "HostName": "my-web-site.com", "HttpRedirectCode": "302", "Protocol": "https", "ReplaceKeyWith": "maintenance.html" } } ]
保存配置后,S3会生成一个静态网站端点。
- 目标域名填写
更新Route53解析记录
进入对应域名的Route53托管区:- 删除原有的
internal-site.my-web-site.com解析记录(如指向本地站点的A/AAAA记录) - 添加新的A记录(或AAAA记录):
- 开启「别名」选项
- 别名目标选择刚才生成的S3静态网站端点(注意选择对应区域的静态网站域名,而非S3 REST API端点)
- 删除原有的
方案二:结合CloudFront实现HTTPS重定向(推荐)
如果子域名需要HTTPS访问,或主站已基于CloudFront部署,优先选择此方案:
准备HTTPS证书
在AWS Certificate Manager(ACM)中申请覆盖internal-site.my-web-site.com的证书(需在us-east-1区域申请,适配CloudFront),或使用已包含该子域名的通配符证书。创建CloudFront分配并配置重定向
- 新建CloudFront分配,源域名填写主站的S3静态网站端点或主站的CloudFront分配域名
- 在「缓存行为」中,编辑默认行为,关联一个CloudFront函数处理重定向:
函数代码示例:
将函数触发事件设置为「Viewer Request」,确保在请求到达源之前完成重定向。function handler(event) { const request = event.request; const host = request.headers.host.value; if (host === 'internal-site.my-web-site.com') { return { statusCode: 302, statusDescription: 'Found', headers: { location: { value: 'https://my-web-site.com/maintenance.html' } } }; } return request; } - 在CloudFront分配「设置」→「备用域名(CNAMEs)」中添加
internal-site.my-web-site.com,并关联步骤1中的ACM证书。
更新Route53解析
在Route53托管区中,将internal-site.my-web-site.com的A/AAAA记录设置为CloudFront分配的别名目标。
关键注意事项
- 重定向状态码:使用302临时重定向,避免浏览器永久缓存重定向规则,方便维护结束后恢复原解析。
- 测试验证:配置完成后,使用
curl -v internal-site.my-web-site.com或浏览器访问,确认是否正确跳转到目标维护页面。 - 权限说明:S3存储桶无需开启公开访问权限(重定向逻辑由S3静态网站托管处理,无需存储实际内容);CloudFront分配需确保源访问权限配置正确。
内容的提问来源于stack exchange,提问作者Matthew Aderhold
相关产品推荐
相关产品推荐

