amazon-web-services - Api 网关和区域自定义域作为 CloudFront 源
问题描述
我想创建一个具有区域自定义域的 API 网关并将其用作 CloudFront 分发源。我的主要动机是控制 MinimumProtocolVersion/TLS1.2
我的问题是,区域自定义域的自定义域名是否必须与 CloudFront 分配的域名匹配,或者我是否可以分隔域名。
当不匹配时,我的团队经历了来自 CF 的 403 错误,我只是在仔细检查这是否可行
例子:
ApiGW:
- Custom Domain Name (REGIONAL). For example www.sample.com (
- matching ACM certificate in eu-west-1
- No R53 records referencing this domain name
Cloudfront:
- ACM certificate in us-east-1
- Alias www.example.com
- Origin; www.sample.com
- R53 recrod for www.example.com, in hosted zone example.com mapped to the CF disitribution domain name
解决方案
当 CloudFront 与源建立连接时,它始终使用源域名来查找源的 IP 地址......但是当它与源协商 TLS 时,它将 SNI 设置为与 HTTPHost
标头相同的值发送到原点。
这两个值可能相同,也可能不同,但Host
/SNI 始终彼此相同,并且始终是以下两个值之一:
- 它是源域名(可能由 Lambda@Edge 源请求触发器在自定义源参数中修改),当缓存行为设置不包括将
Host
标头(或所有标头)列入白名单以转发到源时,或者 - 它是浏览器发送到 CloudFront 的HTTP
Host
标头(可能由 Lambda@Edge 请求触发器在请求标头中修改),当缓存行为设置确实包括将Host
标头列入白名单以转发到源时。
所以,本质上,如果header被转发,name需要匹配,如果Host
不是,则必须不同。
此外,如果不同,则必须在 DNS 中实际配置该主机名并指向分配的区域 API 端点——您不能仅将分配的 DNS 别名目标指向为原始域名。
不幸的是,在少数情况下,CloudFront 在使用 403 错误时会有些混乱。有时,此代码用于更正确地被视为 400 或 421 错误的错误,因此在检查 403 的某些问题时响应正文很重要。如果您将域名指向 CloudFront 而不将该域设置为备用域名对于分配,您将收到一个 403,其正文显示为“错误请求”,并且该事件不会记录在您的 CloudFront 日志中,因为缺少备用域名设置会阻止 CloudFront 将该请求映射到您的特定分配。
推荐阅读
- python-3.x - 如何查找字符串中字符的第 n 次出现的索引
- github - GitHub - 如何直观地查看两个分支之间的文件差异?
- postgresql - Kubernetes 密码验证上的 Postgres 失败
- java - 是否有任何其他可能性将字符串转换为双精度?
- javascript - 使用 clearRect 更新新分数时如何清除分数?
- oracle - 触发器没有更新表
- rtmp - RTMP 可以在单个块流中多路复用消息吗?
- python - 忽略无效数据的 Pandas 直方图;限制 x 范围
- scilab - SCILAB ode:如何求解二阶 ODE
- javascript - if 和 else 语句条件值未被识别