S3静态网站/api路径转发至EC2 Node服务器实现方案咨询
实现方案:CloudFront多源路由+S3静态托管+EC2 API服务
一、核心思路
放弃S3的重定向规则,改用CloudFront作为统一入口,通过配置多源(Origin)+ 路由行为(Behaviors),在边缘节点直接将/api/*请求转发到EC2的Node服务器,静态文件请求则路由到S3。全程保持请求域名不变(始终是domain.com),既利用S3+CloudFront的静态文件性能优势,又能正常处理API请求。
二、分步配置
1. 前置准备
- 确认S3静态网站托管已配置完成,静态文件上传完毕,且通过**Origin Access Control(OAC)**限制仅CloudFront能访问桶内文件(无需开启S3公开读)。
- EC2上的Node容器已部署成功,能正常响应
/api/*路径的请求,且EC2安全组允许CloudFront IP段(或直接开放对应端口,如3000)的访问。 - 已在AWS Certificate Manager(ACM,需在us-east-1区域申请)获取
domain.com的SSL证书,用于CloudFront的HTTPS配置。
2. 创建CloudFront分发
添加两个源(Origin)
- 静态文件源:
- Origin域名选择S3静态网站的托管Endpoint(不是S3桶的REST API域名,格式类似
your-bucket.s3-website-xx-xxxx-x.amazonaws.com) - Origin ID设为
S3-Static-Origin - 配置Origin Access Control,关联之前创建的OAC,确保CloudFront能读取S3文件。
- Origin域名选择S3静态网站的托管Endpoint(不是S3桶的REST API域名,格式类似
- API服务源:
- Origin域名输入EC2的公网IP/弹性IP(如果用容器映射了端口,无需额外配置端口,后续在行为里设置),或EC2容器服务的访问地址
- Origin ID设为
EC2-API-Origin - Origin Protocol Policy选择
HTTPS Only(如果Node服务器配置了HTTPS)或HTTP Only(根据实际部署情况)
配置路由行为(Behaviors)
- API路由行为:
- Path Pattern填
/api/* - 关联
EC2-API-Origin - 缓存策略选择
CachingDisabled(API请求多为动态内容,无需缓存) - 允许的HTTP方法勾选Node服务器支持的类型(如GET、POST、PUT等)
- Path Pattern填
- 默认静态文件行为:
- 保留默认的Path Pattern(空值,匹配所有未被其他行为覆盖的请求)
- 关联
S3-Static-Origin - 缓存策略选择
CachingOptimized(适配静态文件的缓存规则)
自定义域名与HTTPS配置
- 在CloudFront分发的「Alternate Domain Names (CNAMEs)」中添加
domain.com - SSL证书选择之前在ACM申请的
domain.com证书
3. DNS配置
在你的DNS服务商(如Route 53)中,将domain.com的A记录指向CloudFront分发的域名。
三、为什么之前的S3路由规则无效?
你配置的S3规则是301重定向,会强制浏览器将请求跳转到ec2-domain.com,不仅暴露了EC2的独立域名,还改变了请求的域名,不符合你「同域名处理API」的需求。而CloudFront的多源路由是在边缘节点后台转发请求,用户端的请求始终是domain.com/api/*,完全透明。
四、额外优化建议
- 如果EC2是多实例部署,建议搭配Application Load Balancer(ALB),将EC2实例挂载到ALB后,再把ALB地址作为CloudFront的API源,实现负载均衡与健康检查,提升服务稳定性。
- 配置CloudFront WAF(Web应用防火墙),对API和静态文件请求添加安全防护,拦截恶意流量。
内容的提问来源于stack exchange,提问作者Alexandre Krabbe
相关产品推荐
相关产品推荐

