如何用Route 53管理Elastic Beanstalk API与CloudFront路由?
同域名分路径路由实现方案(AWS环境)
针对你需要用同一个域名实现根路径指向S3静态站、/api路径指向Elastic Beanstalk API的需求,以下是几种可行方案,按推荐优先级排序:
方案一:CloudFront 统一入口(推荐)
利用你已有的CloudFront作为流量统一入口,通过配置不同的行为规则实现路由:
- 保留CloudFront默认行为,路径模式为
Default (*),源站指向S3静态网站(确保已配置OAC或OAI保障S3的访问安全) - 添加新的CloudFront行为:
- 路径模式设置为
/api/* - 源站选择「自定义源」,填写Elastic Beanstalk API的公网域名
- 根据API的缓存需求配置缓存策略(比如API通常不需要缓存,可设置TTL为0或启用实时日志)
- 可选:配置路径重写,如果你的Django API根路径是
/而非/api,可在「源设置」中开启路径重写,将/api/*替换为/*后转发到Beanstalk
- 路径模式设置为
- Route53仅需将你的域名指向CloudFront分配的域名即可
方案二:API Gateway 作为转发层
如果需要更精细的API管控(比如授权、限流),可以用API Gateway作为统一入口:
- 为API Gateway配置自定义域名,绑定你的DNS记录
- 在API Gateway中创建两个资源:
- 根资源
/:配置HTTP集成,指向CloudFront静态网站的域名,转发所有根路径请求 /api资源:配置HTTP集成,指向Elastic Beanstalk API的域名,转发所有API路径请求
- 根资源
- 注意:静态资源通过API Gateway转发会增加额外成本和延迟,仅适合API流量占比高的场景
方案三:Lambda@Edge 自定义路由(复杂场景)
如果需要更灵活的路由逻辑(比如动态路径匹配、请求头修改),可以结合CloudFront和Lambda@Edge:
- 创建Lambda函数,在CloudFront的「查看请求」阶段触发
- 在Lambda中判断请求路径:如果以
/api/开头,将请求转发到Beanstalk API;否则转发到S3静态站 - 将该Lambda关联到CloudFront分配,实现自定义路由逻辑
- 此方案复杂度较高,适合有特殊路由需求的场景
通用注意事项
- 确保所有源站的访问权限配置正确:比如Beanstalk的安全组要允许CloudFront/API Gateway的IP访问,或通过WAF限制访问来源
- 统一SSL证书:CloudFront或API Gateway需使用覆盖你域名的SSL证书(可在ACM中申请免费证书)
- 测试路径转发:验证
/api路径的请求是否正确转发到Beanstalk,根路径是否正常返回静态资源
内容的提问来源于stack exchange,提问作者Gati
相关产品推荐
相关产品推荐

