如何 CNAME 到 Amazon API 网关端点

How to CNAME to Amazon API Gateway Endpoint

我正在尝试在 Cloudflare 上设置 CNAME 以指向 Amazon API 网关端点。 CNAME 用于引用我的子域之一。网关又指向 DigitalOcean 上服务器的 IP。我对 Amazon Web 服务非常陌生,如果有人能给我概述 DNS、Amazon Gateway 和 Cloudfront 的正确配置(我认为需要将网关暴露给 Amazon 外部的 DNS 服务器),我将不胜感激。任何帮助将不胜感激。

更新

我已经研究了一段时间,但没有取得太大进展。有没有人知道这是否是一种可行的方法或其他方法?

更新2

我认为我需要将 CNAME 记录添加到 cloudFlare,但最终进入了重定向循环,观察者:

curl -L -i -v https://sub.mydomain.com/

注意:似乎这种方法不再有效,因为 AWS 现在只接受来自某些权威机构的证书。我自己还没有测试过,但 Gunar 的回答看起来很有希望。

简单地将 Cloudflare 指向您的 API 网关域并收工有几个原因:

  • API 网关使用共享主机,因此它使用域名来确定 API 将请求发送到的目标。它无法知道 api.yourdomain.com 属于您的 API.
  • API 网关要求您使用https,但它使用的证书仅对默认域有效。

但是有一个解决方案。以下是我最近设置时遵循的步骤:

  1. 从 Cloudflare 仪表板的加密选项卡生成原始证书。
  2. 将证书导入 us-east-1 区域的 AWS Certificate manager,即使您的 API 位于其他区域。如果系统提示您输入证书链,您可以从 here.
  3. 复制它
  4. 在 API 网关控制台中添加您的自定义域,并 select 您刚刚添加的证书。查看 AWS support article 了解有关如何执行此操作的更多信息。
  5. 自定义域完成初始化通常需要大约 45 分钟。一旦完成,它将为您提供一个新的 Cloudfront URL。继续并确保您的 API 在这个新的 URL.
  6. 中仍然有效
  7. 转到 Cloudflare DNS 选项卡并设置指向您刚刚创建的 Cloudfront URL 的 CNAME 记录。
  8. 切换到加密选项卡并将您的 SSL 模式设置为“完全(严格)”。如果您跳过此步骤,您将获得一个重定向循环。

就是这样。享受从您的自定义域提供的新的高度可用 API!

使用 CloudFlare 设置亚马逊的 API 网关自定义域

  1. 在您的 AWS 管理控制台中,转到 API 网关服务,然后从左侧菜单中选择 select Custom Domain Names

  2. 单击 Create 按钮。

  3. 登录 CloudFlare,select 您的域并打开 Crypto 选项卡

  4. 转到 SSL 并将您的 SSL 模式设置为 "Full (Strict)" 以避免重定向循环。

  5. 转到 Origin Certificates 并单击 Create Certificate

  6. 让CloudFlare生成私钥和CSR并选择RSA作为私钥类型

  7. 确保包含您的自定义 API 域的主机名。 (例如 api.mydomain.com。您可以专门配置此自定义域或使用通配符,例如默认配置的 *.mydomain.com。

  8. 选择 PEM 作为默认 select 的密钥格式。

  9. 在 AWS 中切换到区域 US-EAST-1 并转到 Certificate Manager

  10. 单击Import a Certificate

  11. 将证书正文从您的 CloudFlare 证书复制到证书正文到 AWS 管理控制台中自定义域的配置。

  12. 将私钥复制到控制台中的证书私钥字段

  13. 在证书链中复制可以找到的 Cloudflare Origin CA - RSA Root here

  14. 在 AWS 控制台中输入您的自定义域名和证书名称

  15. 现在将在 AWS CloudFront 中创建自定义域名。域变为活动状态可能需要长达一个小时的时间。

  16. 接下来您需要做的是在 AWS 控制台中设置自定义域的映射。

  17. 最后一步是在 CloudFlare 中创建一个新的 CNAME Record 以 link 您的域到 CloudFront url。当您在 AWS 控制台中打开自定义域的设置页面时,复制分发域名。这是您在创建新 CNAME Record.

  18. 时需要使用的域

Source

这个问题的两个现有答案都是正确的,但如果在完全按照这些说明操作后问题仍然存在,请尝试进入 API 网关设置,导航至 "Custom Domain Name" 并配置 Base路径映射。

这是解决我所有问题的缺失步骤。

我无法得到任何其他答案。所以我最终让 AWS 生成证书而不是使用 Cloudflare Origin 证书。那是因为 AWS 不接受我的 Cloudflare 证书,即使提供了链。我在 Mozilla 的 Certificate Authority list 中看不到 Cloudflare(根据文档,这是 AWS 所依赖的)所以我想这是有道理的。


这是我的解决方案的概要:

  1. 创建 AWS Route53 区域
  2. 使用验证方法 DNS
  3. 创建 AWS ACM 证书(必须在 us-east-1 中)
  4. 使用 (2) 的输出创建 Cloudflare DNS 记录
  5. 创建AWSAPI网关域名
  6. 创建 Cloudflare DNS CNAME 记录,将“@”(根域)指向步骤 (4) 中的 Cloudfront 域名
  7. 创建 AWS API 网关基本路径映射

大概就这些吧。愿这对某人有所帮助。欢迎提问。