如何让AWS API Gateway启用自定义域名访问?
解决Cloudflare代理AWS API Gateway自定义域名的403与证书问题
核心方案:给API Gateway配置自定义域名+Cloudflare代理
这是无需迁移DNS到Route53或使用CloudFront的简便实现方式,步骤如下:
在AWS ACM申请自定义域名证书
- 登录AWS Certificate Manager,选择us-east-1区域(API Gateway自定义域名要求证书必须在此区域)
- 申请
api.my-domain.com的证书,采用DNS验证方式:复制AWS生成的验证CNAME记录,到Cloudflare域名后台添加对应记录,快速完成验证
给API Gateway绑定自定义域名
- 进入API Gateway控制台,打开「自定义域名」页面点击「创建」
- 填写自定义域名
api.my-domain.com,选择刚申请的ACM证书,关联你的API部署阶段(比如prod) - 完成后,AWS会生成一个API Gateway目标域名(格式类似
d-abc123.execute-api.us-east-1.amazonaws.com),复制该域名备用
配置Cloudflare DNS与代理
- 登录Cloudflare域名管理后台,添加一条CNAME记录:
- 名称:
api - 目标:粘贴刚才复制的API Gateway目标域名
- 代理状态:开启(橙色云图标)
- 名称:
- Cloudflare SSL模式设置为「严格」或「灵活」,推荐选择「严格」以保障加密链路完整
- 登录Cloudflare域名管理后台,添加一条CNAME记录:
修复Cloudflare代理导致的403错误
- 403通常由API Gateway的Host头校验或资源策略限制引发:
- 检查API Gateway的资源策略,若有IP白名单,添加Cloudflare全量IP段;无需严格控制的话,可设置允许所有来源
- 在Cloudflare「规则」→「转换规则」中添加一条修改请求头规则:
- 匹配条件:主机名等于
api.my-domain.com - 操作:添加请求头
X-Forwarded-Host,值设为api.my-domain.com
- 匹配条件:主机名等于
- 确保API Gateway的CORS配置正确:允许的Origin包含你的前端域名(或
*用于测试),允许的请求方法包含OPTIONS,允许的请求头覆盖Content-Type等常用字段
- 403通常由API Gateway的Host头校验或资源策略限制引发:
为什么之前的方法失败?
- 直接CNAME到原始API域名:AWS证书仅对
*.amazonaws.com有效,与自定义域名不匹配,触发浏览器证书错误 - 重定向方案:浏览器发送的OPTIONS预检请求不允许重定向,导致CORS报错
- Cloudflare直接代理原始API域名:API Gateway会校验请求Host头,原始API域名要求Host为AWS域名,而Cloudflare转发的是自定义域名,因此返回403
内容的提问来源于stack exchange,提问作者SamTest
相关产品推荐
相关产品推荐

