禁用 http 重定向到 https

Rai*_*kas 2 amazon-web-services amazon-route53 aws-api-gateway serverless

我正在使用 lambda 函数开发小服务,该函数在您的 CLI 中使用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>
Run Code Online (Sandbox Code Playgroud)

我的目标是通过调用curl domain.io.

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

目前我称之为curl -F domain.io将遵循重定向,但这不是我正在寻找的解决方案。

谢谢!

Mic*_*bot 5

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

等待几分钟,让 API Gateway 释放 AWS Edge Network 中的自定义域(无法确定何时完成,但您会在后续步骤之一中收到错误消息。20 分钟应该够了)。

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

对于源协议策略,选择仅 HTTPS。

将 Origin Path 设置为您的舞台前缀(例如/prod/v1)——无论您设置为舞台前缀。

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

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

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

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

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

等待 CloudFront 分配状态从进行中更改为已部署。

测试。

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

问:我可以创建 HTTPS 端点吗?

是的,使用 Amazon API Gateway 创建的所有 API 都仅公开 HTTPS 终端节点。Amazon API Gateway 不支持未加密 (HTTP) 终端节点。

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

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

一旦您验证了您的行为,您可以选择增加 CloudFront 中的默认 TTL,这将使其在几秒钟内缓存响应达到该值,通过向 API Gateway 发送更少的实际请求并向调用者重放缓存的响应来降低您的成本。

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