将 S3 静态站点与应用程序负载均衡器结合使用
Posted
技术标签:
【中文标题】将 S3 静态站点与应用程序负载均衡器结合使用【英文标题】:Using a S3 Static Site with an Application Load Balancer 【发布时间】:2019-12-14 13:51:48 【问题描述】:我有一个 ALB,它当前将流量路由到多个 url。如果我们需要执行维护,我希望能够将流量路由到静态 S3 站点。然后,我们将显示一个静态的“维护”页面,而不是我们的登录页面。
我创建了一个 CloudFront 分配,允许 S3 站点加载 SSL 证书,但我不确定如何连接该分配以将所有流量发送到 S3 维护站点。
这是我正在使用的 Terraform ALB 侦听器。我可以在target_group
指定我的CloudFront 分配arn
并让它将所有流量路由到静态站点吗?
或者我可以简单地将我的 S3 arn
与允许 ALB 访问以获取存储桶对象的 S3 策略链接?
resource "aws_alb_listener" "ssl_alb_httpslistener"
load_balancer_arn = "$aws_alb.alb_lis.arn"
port = "443"
protocol = "HTTPS"
ssl_policy = "Sec-TLS"
certificate_arn = "$var.ssl_cert_arn"
default_action
target_group_arn = "$data.terraform_remote_state.php.target_arn"
type = "forward"
我希望我可以将通过 ALB 的流量从 target_group
路由到静态 S3 站点。好奇这是否是解决此问题的最佳方法。
【问题讨论】:
【参考方案1】:简单的答案是使用 ALB 上的重定向选项将流量转发到新的 url。我的 Route53 url 连接到与 S3 存储桶链接的 CloudFront 分配。在这里,我可以指定一个重定向 url,并通过最少的基础设施修改来保持我的 HTTPS 流量选项。
【讨论】:
【参考方案2】:您现在可以将 Lambda 函数作为目标组,并且使用 Lambda,您可以触发 S3、发出 cloudfront(http) GET 请求等。
【讨论】:
lambda 的问题是,请求的主体只能是 1MB。我在提供 Angular 应用程序时遇到了同样的问题。我无法加载 main..*.js,因为它是 1.4 MB。仍在寻找另一种解决方案,因为我们希望在同一主机下拥有前端和后端。如果有人有解决方案,请发表评论!【参考方案3】:我在使用 ALB 和 lambda 时遇到了同样的 1MBytes 限制问题,并使用压缩作为解决方法。 在响应头中设置 Content-Encoding= 并相应地压缩您的文件。
【讨论】:
以上是关于将 S3 静态站点与应用程序负载均衡器结合使用的主要内容,如果未能解决你的问题,请参考以下文章