如何CNAME到Amazon API Gateway端点

时间:2016-04-20 07:55:07

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

我正在尝试在Cloudflare上设置CNAME以指向Amazon API Gateway端点。 CNAME用于引用我的某个子域名时使用。网关反过来指向DigitalOcean上的服务器的IP。我是亚马逊网络服务的新手,如果有人能够概述DNS,亚马逊网关和Cloudfront的正确配置(我认为需要将网关暴露给亚马逊外部的DNS服务器),我将不胜感激。任何帮助将不胜感激。

更新

我已经在这方面做了一段时间而没有取得多大进展。有没有人知道这是一种可行的方法还是可以做到的其他方法呢?

UPDATE2

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

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

4 个答案:

答案 0 :(得分:35)

有几个原因可以解释为什么只需将Cloudflare指向您的API网关域并将其称为一天:

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

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

  1. 从Cloudflare信息中心的加密标签生成原始证书。
  2. 将证书导入us-east-1区域中的AWS证书管理器,即使您的API位于其他区域也是如此。如果系统提示您输入证书链,则可以从here
  3. 复制它
  4. 在API网关控制台中添加自定义域,然后选择刚刚添加的证书。有关如何执行此操作的详细信息,请查看AWS support article
  5. 自定义域通常需要大约45分钟才能完成初始化。完成后,它将为您提供新的Cloudfront URL。继续,确保您的API仍可通过此新网址运行。
  6. 转到Cloudflare DNS标签,设置指向您刚刚创建的Cloudfront网址的CNAME记录。
  7. 切换到加密选项卡并将SSL模式设置为“Full(Strict)”。如果您跳过此步骤,您将获得重定向循环。
  8. 就是这样。享受您的自定义域提供的全新高可用性API!

答案 1 :(得分:21)

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

  1. 在您的AWS管理控制台中,转到API网关服务,然后从左侧菜单中选择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网址相关联。在AWS控制台中打开自定义域的设置页面时,请复制分发域名。这是您在创建新CNAME Record时需要使用的域。

  18. Source

答案 2 :(得分:1)

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


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

  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基本路径映射

应该大致如此。可以帮助别人。随时提出问题。

答案 3 :(得分:0)

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

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