在AWS API网关上将http://请求重定向到https://(使用自定义域)

sup*_*san 18 amazon-web-services amazon-route53 aws-sdk aws-api-gateway

我正在使用AWS API Gateway和自定义域.当我尝试访问https://www.mydomain.com时,它运行正常,但是当我尝试http://www.mydomain.com时它无法连接.

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

Mic*_*bot 11

API网关不直接支持没有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关联.

  • 感谢你的回答。AWS 让我的生活变得更加复杂。我想做的只是让我的网站作为 lambda 函数运行。我需要将所有 HTTP GET 请求重定向到 HTTPS(对于手动键入网站地址的用户)并有权访问原始请求标头(接受语言、主机名、用户代理等)。API Gateway 甚至不提供将 HTTP 重定向到 HTTPS(为什么???),并且 CloudFront 会删除所有标头,以便网站甚至无法获取其主机名。 (7认同)