我正在使用lambda函数开发少量服务,该函数使用curl
在您的CLI中返回“当日情况”。
首先,我开发了业务逻辑,并使用Serverless部署和创建了lambda。
第二,我使用AWS路由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
,它将遵循重定向,但这不是我正在寻找的解决方案。
谢谢!
答案 0 :(得分:3)
从API网关中删除自定义域配置。
请等待几分钟,以使API Gateway在AWS Edge Network中释放自定义域(无法确定何时完成此过程,但是后续步骤之一会出错,直到该错误完成为止)。 。20分钟就足够了。
使用分配给您的API阶段的通用...execute-api...amazonaws.com
域名创建CloudFront分配。
对于“原始协议策略”,选择“仅HTTPS”。
将“原始路径”设置为阶段前缀(例如/prod
或/v1
)-设置为阶段前缀的任何内容。
将查看器协议策略设置为HTTP和HTTPS。
将“最小TTL”和“默认TTL”设置为0。
将分发的备用域名设置为您的自定义域。
如果您希望SSL在您的自定义域上运行(可选),请将ACM证书与CloudFront发行版关联。
更改您的DNS条目,使其指向分配给您的分发的*.cloudfront.net
主机名。
等待CloudFront分发状态从“进行中”更改为“已部署”。
测试。
这似乎需要花很多功夫才能针对API网关启用HTTP,但因为API网关是专门为不支持HTTP而设计的,所以它是必需的-它仅与HTTPS一起使用,因为这通常是API的最佳做法
问:我可以创建HTTPS端点吗?
是的,使用Amazon API Gateway创建的所有API仅公开HTTPS终端节点。 Amazon API Gateway不支持未加密的(HTTP)终端节点。
CloudFront通常被称为CDN,但实际上,它是瑞士军方自定义HTTP请求操纵的一种工具,
一旦您验证了行为,则可以选择在CloudFront中增加Default TTL,这将导致它在几秒钟内最多缓存该值的响应,通过向API网关发送更少的实际请求并向其中重放缓存的响应来降低成本呼叫者。
此设置与您现在的设置有所不同,因为您可以控制CloudFront分发,而不是API Gateway ...,因此可以通过API Gateway在其控制时不允许的方式对其进行自定义。