【问题标题】:Custom domain for API Gateway returning 403API 网关的自定义域返回 403
【发布时间】:2016-07-27 17:44:37
【问题描述】:

我正在使用 API Gateway 和 Lambda 创建一个 API。使用 API Gateway Stage 编辑器中指定的 url 一切正常;但是,当我尝试移动到自定义域时,我遇到了一些问题。

我尝试的第一件事是使用 Route 53 中的 CNAME 记录直接从我的域到我从 API 网关获得的域。那是返回一些错误,我认为这是不正确的解决方案是正确的吗?

接下来我尝试了 API Gateway 中的自定义域名功能。我的理解是,这将汇总一个 CloudFront 分配,然后我可以从 Route 53 映射到该分配。当我创建自定义域并添加域映射时,它为我提供了一个我认为是 CloudFront 分配的 URL。该链接返回 403 响应,并且未在 CloudFront 中进行分配。有什么好的方法可以调试这个问题?

【问题讨论】:

  • 在您使用 API Gateway 时,您始终拥有 CloudFront 分配,而不仅仅是在您启用自定义 URL 时。您不会在 CloudFront 仪表板中看到它,因为它是在后台管理的,您无法直接访问它。
  • 好吧,这是有道理的。这以及我没有等待足够长的时间让 CloudFront 启动的事实是问题所在。我今天早上来了,它正在工作。
  • 我遇到了这个问题,发现等到第二天早上“解决”了它。我认为创建和分配边缘域的过程是非常异步的。
  • 我在托管的域名 URL 上收到 {“message”:“Forbidden”},但是当我打开 api 端点时,我的服务被访问了。请注意,我的 api 是打开的,但我的 route 53 条目在不同的 aws 帐户中,我为 api 和 cloudfront 创建的自定义域在不同的 aws 帐户中

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


【解决方案1】:

您需要在请求中使用主机标头。主机应该是您的自定义域。

curl https://<cf-id>.cloudfront.net/myapi -H "Host: api.myapi.com"

【讨论】:

  • 添加 Host 标头对我来说是缺失的部分。我有 APIG 所需的 API 密钥,并且已经提供了 x-api-key 自定义标头,但没有 Host 标头,使用 cloudfront 时始终禁止请求
  • 这才是真正的答案!
  • 不,不是。使用自定义域的全部意义在于您可以使用 it 而不是使用cloudfront.net
  • 在将其连接到“真实”域之前验证一切是否正常很有用。
  • 我用邮递员试过,这解决了一半的问题。但是您不能在 AJAX 请求中设置 Host 标头,浏览器不允许您这样做。有解决办法吗?
【解决方案2】:

如果您还没有看过,这里是开发者指南。 http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-custom-domains.html

您需要做的就是设置一个 CNAME,让您的 DNS 提供商指向 API Gateway 为您提供的 CF 分发。您将无法直接对 CF 分发进行 API 调用。 API Gateway 从您在 API Gateway 中设置的 Base Path 映射映射 API/阶段,因此只有针对域名的 API 调用才能正常工作。

【讨论】:

  • 我想知道是否可以在没有云端分发的情况下使用 APIGW 自定义域...
  • 啊,这取决于端点类型,边缘或区域......
  • 我在托管的域名 URL 上收到 {“message”:“Forbidden”},但是当我打开 api 端点时,我的服务被访问了。请注意,我的 api 是打开的,但我的 route 53 条目在不同的 aws 帐户中,我为 api 和 cloudfront 创建的自定义域在不同的 aws 帐户中
【解决方案3】:

就我而言,我必须添加基本路径映射。

【讨论】:

  • 是的,即使您不想在您的 url 布局中添加额外的位(例如 api.mydomain.com/whatever),您也需要在其中添加 / 基本路径映射为了让它工作
  • 这个答案解决了我的问题。
【解决方案4】:

就我而言,旧版缓存设置标头是问题所在。

如果您在云端行为中选择了旧版缓存设置 在behavior-> Legacy cache settings-> Header drop down下的云端分发中

选择值为 None 后解决了我的问题

【讨论】:

猜你喜欢
  • 2017-11-05
  • 2021-10-28
  • 2021-09-17
  • 1970-01-01
  • 2021-04-21
  • 1970-01-01
  • 1970-01-01
  • 2020-11-16
  • 2018-06-26
相关资源
最近更新 更多