我在为我的 AWS EC2 实例设置 HTTPS 时遇到了麻烦。简而言之,我在 EC2 实例上运行一个程序,能够安全地将数据从客户端传输到 AWS 至关重要。
我目前所做的:
在 AWS 上:
- 启动了 EC2 实例 (t2.micro,ubuntu)。该实例运行正常,可通过 SSH 访问。
- 通过 Amazon 的证书管理器在 www.ourdomain.com 下创建公共 SSL 证书
- 使用之前的证书创建了一个面向互联网的应用程序负载均衡器,并带有一个 HTTPS 侦听器(在端口 443 上)
- 使用我们的 EC2 实例创建目标组并将其添加到负载均衡器
- 对于负载均衡器安全组,启用来自任意位置的入站 HTTPS,以及到 EC2 实例安全组的出站 HTTP 和 HTTPS
- 对于实例安全组,启用来自负载均衡器安全组的入站 HTTPS
在 GoDaddy 上:
- 创建了 CNAME 记录(主机:www.ourdomain.com,值:负载均衡器 DNS 名称)
问题:
- 在我的目标组的“目标”选项卡下,我看到以下内容:“这些可用区均不包含健康目标。请求正在路由到所有目标”
- 此外,在目标组的“目标”选项卡下,该实例的信息按钮显示:“健康检查失败,代码如下:[502]”
- 如果我检查 ssllabs.com 上的域名,我会收到“评估失败:无法连接到服务器”
如果可能的话,我想避免使用 Route53,但不幸的是我找不到有关此问题的不涉及 Route53 的 AWS 文档。
我不是网络或 AWS 专家,所以很可能缺少一些简单的东西。非常感谢任何建议!
答案1
Chupacabra 有一些很好的建议,它们没有帮助吗?我也在这方面浪费了太多时间,在这里总结一下我的建议:AWS Fargate:对可怕的“服务...不健康”进行故障排除
重要提示:
- 请求/返回 200 OK 吗?
- 他们回来得够快吗?
- 服务启动后是否能够足够快速地响应?
- 侦听器是否尝试使用正确的协议在实际运行的端口上联系服务?服务的安全组是否允许负载均衡器的安全组访问该端口?
请参阅博客文章以了解详细信息和更多提示。
答案2
除了 @Jakub 提到的内容之外,请确保您的健康检查 API 正常工作。我一直在使用 AWS Fargate,当创建负载均衡器时,健康检查将默认使用“/”作为健康检查 API,而当您创建 ECS 服务时,它将采用服务名称“/ecs-service”。您可以按照此链接中提供的内容检查此处配置的健康检查 APIhttps://engineering.telia.no/blog/troubleshooting-fargate-health-check
AWS CLI 命令:aws elbv2 modified-target-group --target-group-arn "" \ --health-check-timeout-seconds 30 \ --health-check-interval-seconds 200
如果您正在使用 ECS Fargate,请确保已执行以下步骤:1)子网 IP 地址是否可以在您的容器中访问 2)您的 docker 容器端口是否正确公开?3)您的健康检查 API 是否正常工作?
答案3
502 是坏网关,您遇到了一些路由问题。很可能是您的安全组或路由表出了问题。
您的 alb/elb 和 ec2 实例应该位于同一 VPC 中的不同子网中。
您的 elb 应该接受端口 80 上的连接并将其重定向到端口 443,并且您的 EC2 实例应该接受来自 elb 所在子网的端口 80 上的连接。
创建一个目标组,指向 EC2 实例所在的端口 80 上的子网,但您必须确保您的实例实际上正在监听该端口。
然后创建一个使用该目标组的 ELB。
对于端口 80 侦听规则,请确保它重定向到https://www.ourdomain.com:443/?,状态代码http_301。
对于您的端口 443 侦听器规则,转发到您的目标组。