【问题标题】:How to CNAME to Amazon API Gateway Endpoint如何对 Amazon API Gateway 终端节点进行 CNAME
【发布时间】:2016-08-12 17:58:24
【问题描述】:

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

更新

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

更新2

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

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

【问题讨论】:

  • 您是否阅读并按照docs.aws.amazon.com/apigateway/latest/developerguide/…docs.aws.amazon.com/apigateway/latest/developerguide/…API 网关使用自定义域名的步骤操作?
  • 据我所知,这需要我在亚马逊上设置证书。我的 DNS 是在 cloudflare 上设置的,因此希望保持简单,因为它为我做 ssl。 cloudflare 域在直接调用时有效,因此问题似乎只是从 cloudflare 到 cloudfront 的调用。
  • “我的 DNS 是在 Cloudflare 上设置的”和“Cloudflare 为我做 SSL”是完全不相关的事情。 Cloudflare 要执行 SSL,它不仅必须执行您的 DNS,而且还必须为您实际代理请求。你似乎在这个问题中混淆了不同的概念,让你很不清楚你在问什么。请尝试解释您要完成的任务,而不是您尝试完成的方式——在 API 网关端点前使用自定义主机名和 Cloudflare 提供的 SSL 证书听起来像是您要尝试的内容做。
  • 很抱歉给您带来了困惑。我不是网络人,我想它表明了!我已经设置了 Cloudfront,因此当我通过 cloudfront 域查询我的 API 时它可以工作。我的 DNS 是在 Cloudflare 上设置的,并通过页面规则将 http 转换为 https。我正在尝试使用 CNAME 记录将子域 api.mydomain.com 添加到 Cloudflare,但它不起作用。
  • 好的,但这不会让您获得任何 Cloudflare SSL。你能提到有问题的主机名吗?重定向循环没有明显的原因,但是同样也没有明显的原因为什么您需要链中的 CloudFront 才能执行您想做的事情……至少,不是基于可用信息,除非您'正在尝试使用来自 Amazon Certificate Manager 的 SSL 证书,该证书与 CloudFront 集成(但到目前为止尚未另外提及)。

标签: amazon-web-services dns amazon-cloudfront aws-api-gateway


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 该死的!我可能花了 10 多个小时试图弄清楚为什么这不起作用,所需要的只是神秘的第 6 步。先生,你应该得到奖励。
  • 如果我有其他子域实际上没有通过 HTTPs 服务怎么办?! Full(严格)不会破坏它们吗?
  • 是否需要创建证书的步骤,或者您可以在 AWS Certificate Manager 中创建证书吗?
  • 对此答案的补充是只能使用 1024 或 2048 个 RSA 原始证书 - aws.amazon.com/premiumsupport/knowledge-center/…
  • 如果您无法直接在 AWS Certificate Manager 中创建证书,则创建证书的步骤是一种解决方法。
【解决方案2】:

使用 CloudFlare 设置 Amazon 的 API Gateway 自定义域

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

  2. 点击Create按钮。

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

  4. 转到 SSL 并将您的 SSL 模式设置为“完全(严格)”以避免重定向循环。

  5. 转到Origin Certificates并点击Create Certificate

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

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

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

  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 以将您的域链接到 CloudFront url。当您在 AWS 控制台中打开自定义域的设置页面时,复制分发域名。这是您在创建新的CNAME Record 时需要使用的域。

Source

【讨论】:

  • 我同意。中和! ;-)
  • 不幸的是,我的主网站没有启用 SSL(这就是我使用 CloudFlare 来做网站前端的原因)。因此 Full 不起作用...
  • 您能详细说明第 15 步和第 16 步吗?我创建了自定义域,但没有得到任何云端 url
  • @VinayPrabhu 这可能有助于为您感兴趣的 CloudFront 域提供一些见解。docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…
【解决方案3】:

这个问题的两个现有答案都是正确的,但如果即使完全遵循这些指示后问题仍然存在,请尝试进入 API Gateway 设置,导航到“自定义域名”并配置基本路径映射。

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

【讨论】:

    【解决方案4】:

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


    这是我的解决方案的大纲:

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

    大概是这样。愿这对某人有所帮助。随时提问。

    【讨论】:

    • 这是我实施的解决方案。在 Cloudflare 中创建的 CNAME 记录只需要 DNS(不是代理),现在当我在其中启用 Cloudflare 限速规则时,该规则永远不会生效。我们将不胜感激。
    • Cloudflare 需要成为代理才能应用速率限制。
    • 已解决,将记录更改为代理。以前这不起作用,因为我错过了为其创建记录的 3 级子域的证书。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 2022-06-22
    • 2014-02-01
    • 2018-11-13
    • 2020-02-22
    • 1970-01-01
    • 2017-05-06
    相关资源
    最近更新 更多