【问题标题】:Redirect http:// requests to https:// on AWS API Gateway (using Custom Domains)将 http:// 请求重定向到 AWS API Gateway 上的 https://(使用自定义域)
【发布时间】:2018-04-28 21:28:41
【问题描述】:

我正在使用AWS API Gateway with a custom domain。当我尝试访问 https://www.mydomain.com 时,它运行良好,但是当我尝试访问 http://www.mydomain.com 时,它无法连接.

有没有办法用 API 网关中的自定义域重定向 http -> https?如果没有,有没有办法让 http:// 链接像 https:// 链接一样工作?

【问题讨论】:

  • lambda 代码是用什么语言编写的?
  • @KushVyas 它使用的是 nodejs 6.. 不知道这有什么关系?

标签: amazon-web-services aws-sdk aws-api-gateway amazon-route53


【解决方案1】:

API Gateway 不直接支持没有 TLS 的 http,大概是作为一种安全功能,以及出于一些实际考虑。

一般来说,对于 API 来说没有特别好的方法可以做到这一点,因为将 POST 请求从 HTTP 重定向到 HTTPS 实际上有点没有意义——在重定向时数据已经不安全地发送了生成,除非客户端在发送正文之前要求服务器检查请求标头,Expect: 100-continue

您可以创建 CloudFront 分配,并将其配置为将 GETHEAD 请求从 HTTP 重定向到 HTTPS...但是如果您向此类分配发送 POST 请求,CloudFront 不会重定向 - - 它只是抛出一个错误,因为(如前所述)这样的重定向弊大于利。

但是...如果 GET 是您的应用程序,那么它非常简单:首先,使用区域(非边缘优化)API 端点和系统分配的主机名部署您的 API,不是自定义域。

然后,创建一个使用此区域 API 端点作为其源服务器的 CloudFront 分配,并配置 CloudFront 分配的行为以将 HTTP 重定向到 HTTPS。将您的自定义域名与 CloudFront 分配相关联,而不是直接与 API Gateway 相关联。

【讨论】:

  • 您能解释一下如何将自定义域与云端相关联吗?
  • 嗨@Michael-sqlbot,我知道这是一个很老的答案,但也许你仍然可以帮助我。我按照你的解释设置了一切。有大部分但必须从纯 API 网关切换到 CloudFront 以进行 http-> https 重定向......如果我想禁用默认 API 端点并且仅通过 CloudFront 的自定义域提供服务,我可以这样做吗?只是禁用它会导致 404。如果我禁用它,我必须使用什么作为原始域名。还是在使用 CloudFront 时不能这样做?
  • 感谢您的回答。 AWS 让我的生活变得如此复杂。我想做的只是让我的网站作为 lambda 函数运行。我需要将所有 HTTP GET 请求重定向到 HTTPS(对于手动键入网站地址的用户)并有权访问原始请求标头(接受语言、主机名、用户代理等)。 API Gateway 甚至不提供将 HTTP 重定向到 HTTPS(为什么???)并且 CloudFront 删除了所有标头,因此网站甚至无法获取其主机名。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-30
  • 2014-12-28
  • 2019-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
相关资源
最近更新 更多