amazon-web-services - 禁用 http 重定向到 https

标签 amazon-web-services aws-api-gateway amazon-route53 serverless

我正在开发使用 lambda 函数的小服务,它使用 curl 在您的 CLI 中返回“今日事实”。

首先,我开发了业务逻辑,使用 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 自定义域名吗?

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

谢谢!

最佳答案

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

等待几分钟,让 API 网关在 AWS 边缘网络中释放自定义域(无法确定何时完成,但您会在后续步骤之一中遇到错误,直到完成. 20 分钟应该足够了)。

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

对于 Origin Protocol Policy,选择 HTTPS Only。

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

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

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

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

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

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

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

测试。

为了针对 API Gateway 启用 HTTP,这似乎需要付出很多努力,但这是必要的,因为 API Gateway 专门设计为不支持 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 网关在控制时不允许的方式对其进行自定义。

关于amazon-web-services - 禁用 http 重定向到 https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51526462/

相关文章:

amazon-web-services - 对 AWS Elastic Beanstalk 的 HTTPS 请求返回 net::ERR_CERT_COMMON_NAME_INVALID

amazon-web-services - 使用 boto 连接到 aws - 凭证错误

amazon-route53 - 使用 AWS Route 53 映射 Google 域

mysql - 刷新和锁定 RDS Mysql 数据库中的表所需的权限

amazon-web-services - 根据 CloudFormation 条件有条件地创建 CodePipeline 操作 - 不起作用

amazon-web-services - AWS Cloudformation - 属性验证失败 : [Value of property {/RequestParameters/MessageAttributes} does not match type {String}]

amazon-web-services - Docs 中的 AWS API Gateway IAM 策略角色在模拟中失败

amazon-web-services - AWS CloudWatch Logs Insights - 按 API 资源名称对日志进行分组并进行聚合

amazon-route53 - "no matching Route53Zone found": Terraform's Route53 data source is not recognizing the hosted zone name

dns - 在 Amazon Route 53 上使用停放的 GoDaddy 域 - 导入区域文件失败