配置 AWS ALB 以将 http 流量重定向到 https(到 AWS ECS 中运行的 Docker 容器“服务”)

问题描述 投票:0回答:2

背景 我已经配置了一个 Docker 镜像(基于 NGINX 镜像)并将其上传到 AWS ECR - 弹性容器服务,然后将其部署到 AWS ECS 并完美运行。当使用 ECS 任务建议我部署此应用程序的 IP 地址时,我可以通过 http 或 https 访问已部署的(flask)应用程序。这太棒了!

我的问题: 我想通过 demo.mydomain.net(而不是 IP 地址)访问此应用程序,并且另外将所有传入流量重定向到 https,因此我转向 AWS ALB - Application Load Balancer(使用 AWS Certificate Manager (ACM) 和 Route 53)

我无法弄清楚如何配置 ALB,也不知道为什么在尝试了许多不同的设置和配置后它不起作用,我确信这非常简单,但我无法解决。

对我来说,问题是域/ELB(我已配置了 CNAME 条目)和重定向到别名“dualstack.my-domain-82823732.us-west-2”的 A 记录之间似乎存在脱节。 elb.amazonaws.com。”

我尝试过的事情

  • 每次我在 ECS 中尝试新的东西时,我都会创建一个新的 ECS“服务”,以便我可以配置附加 ALB(并测试我正在测试的各种更改)..
  • 我尝试在端口 80 和 443 上使用各种重定向进入 ALB...保留 ALB 的默认设置,然后还尝试配置预设置和后设置。 ECS 中的 docker Flask 应用程序似乎无法与 ALB 进行通信...
  • 尝试将 ALB 包含在我的 docker-compose 文件中(x-aws-loadbalancer:“arn:aws:elasticloadbalancing:us-west-2:123307324622:loadbalancer / app / my-alb / 0f7f213123133225”)
  • 我尝试在 ALB 侦听器中配置“重定向到 URL”(我重定向到端口 443,但也尝试使用端口 80)和“转发到目标组”(似乎永久设置为 HTTP)...这是一个屏幕截图: [ALB settings screen]

我注意到的事情 当我在浏览器中输入 demo.mydomain.net 时,它会被重定向到 https://demo.mydomain.com (太棒了!!)但是,我收到“无法访问该网站”并且我的应用程序日志从未收到来自此 https://demo.mydomain.net 请求的任何流量...我可以看到 ALB 正在返回 301 响应,但随后我在流量中看到“已取消”...(见截图)

希望得到这方面的指导,这似乎是一项非常简单的任务(我过去使用静态网站成功完成了这项任务),这让我相信 NGINX Docker 映像和 ALB 存在一定的复杂性,但日志并没有不支持这个理论,我没有想法。谢谢!!

一个有趣的点是,如果我输入负载均衡器的 DNS“A Record”地址,那么它将显示该站点(通过 http,而不是 https)。

amazon-web-services docker nginx amazon-ecs aws-application-load-balancer
2个回答
0
投票

事实证明这很简单...我需要以相反的方式配置侦听器(在从 80 重定向的 443 上),而不是相反:


0
投票

这是一个非常典型的案例,我也这样配置过ALB。我就是这样做的- 需要以下 ALB 配置 -

  1. 两名听众,一名收听 443,一名收听 80
  2. 443监听下的两条规则
  3. 一条规则低于 80 名听众 端口 80 上的监听器将有一条规则来转发到 HTTPS 的请求,保留 ${Host}、${Path} 和 ${query} 字符串。

端口 443 上的监听器将有两个规则,一个(默认),将请求转发到目标组实例/fargate,两个,将 redirect 基本 url example.domain.com 到子域 URL,例如 example.domain.com /path 或其他域中的其他 URL。 443 下规则的评估顺序必须是重定向规则必须首先执行,然后是转发规则(默认规则)。

这就是 AWS 控制台上的样子。

© www.soinside.com 2019 - 2024. All rights reserved.