禁用 http 重定向到 https

Disable http redirection to https

我正在使用 lambda 函数开发小服务,在您的 CLI 中使用 returns "Fact of the day" curl

首先,我开发了业务逻辑,使用 Serverless 部署和创建了 lambda。

其次,我使用 aws route 53 购买域,在 API 网关上使用“自定义域名”配置证书和路由域。

目前,如果您访问 https://domain.io 服务会按预期工作,但如果您尝试调用 curl domain.io,它会输出:

<html>
<head><title>301 Moved Permanently</title></head>
<body bgcolor="white">
<center><h1>301 Moved Permanently</h1></center>
<hr><center>CloudFront</center>
</body>
</html>

我的目标是通过调用 curl domain.io 在没有 SSL(或重定向)的情况下获得服务 运行。

是否可以避免重定向?或者您可以在没有证书的情况下创建 API custom domain name 吗?

目前我调用 curl -F domain.io 它会跟随重定向,但这不是我正在寻找的解决方案。

谢谢!

从 API 网关中删除自定义域配置。

等待 API 网关在 AWS 边缘网络中释放自定义域(无法确定何时完成,但您会在其中一个上收到错误消息后面的步骤直到。20分钟应该足够了)。

使用分配给您的 API 阶段的通用 ...execute-api...amazonaws.com 域名创建 CloudFront 分配。

对于源协议策略,select 仅限 HTTPS。

将原始路径设置为您的阶段前缀(例如 /prod/v1)——无论您设置什么作为阶段前缀。

将查看器协议策略设置为 HTTP 和 HTTPS。

将最小 TTL 和默认 TTL 设置为 0。

将分发的备用域名设置为您的自定义域。

如果您希望 SSL 有选择地在您的自定义域上工作,请将 ACM 证书与 CloudFront 分配相关联。

更改您的 DNS 条目以指向分配给您的分配的 *.cloudfront.net 主机名。

等待 CloudFront 分配状态从 In Progress 更改为 Deployed。

测试。

针对 API 网关启用 HTTP 似乎需要付出很多努力,但这是必要的,因为 API 网关专门设计为不支持 HTTP -- 它仅适用于 HTTPS,因为这通常是 API 的最佳实践。

Q: Can I create HTTPS endpoints?

Yes, all of the APIs created with Amazon API Gateway expose HTTPS endpoints only. Amazon API Gateway does not support unencrypted (HTTP) endpoints.

https://aws.amazon.com/api-gateway/faqs/

CloudFront 通常被称为 CDN,但它实际上是自定义 HTTP 请求操作的瑞士军刀,这就是一个例子。

验证您的行为后,您可以选择增加 CloudFront 中的默认 TTL,这将导致它在几秒钟内缓存最多该值的响应,通过向 API 发送更少的实际请求来降低成本网关并向调用者重放缓存的响应。

此设置与您现在的不同,因为您控制的是 CloudFront 分配,而不是 API 网关...因此您可以按照 API 网关的方式对其进行自定义控制时不允许。