0

我在尝试通过 HTTPS 协议运行托管在 AWS EC2 上的 API 时遇到问题。

API 在没有ELB 设置的情况下正常运行,但是,在尝试配置后(我按照推荐的步骤操作),我收到502 Bad Gateway消息。

这是我的配置:

  • AWS EC2 (t3a.small) 运行我的 ExpressJS 应用程序的 docker 容器,侦听端口 3000;
  • 打开 http:80 和 https:443 的安全组;
  • ACM 涵盖以下域(mydomain.com、*.mydomain.com);
  • ELB监听端口:http:80、https:443、https:3000;
  • Route 53 与我的托管区域包含具有 ELB DNS 值的 A 类型记录;

以前的网址

http://ec2-ip-address.zone.compute.amazonaws.com:3000/api/

现在

https://api.mydomain.com:443/api/{resourceName}

请,如果我错过了什么让我知道,我将不胜感激有关如何正确设置的任何见解。

4

1 回答 1

1

因此,在@Marcin(请参阅我的问题的评论)和其他人(Reddit 论坛)的帮助下,我能够使其正常工作。

问题是 ELB 无法通过 3000 端口与我的 EC2 实例通信,因为我的安全组上没有配置此端口。

您需要使用 HTTP:80 和 HTTPS:443 创建 ALB(应用程序负载均衡器)和 SG,然后选择您的实例并将其设置为通过端口 3000(或您的 EC2 正在运行的任何端口)与您进行通信。

您应该有两个安全组,一个分配给 EC2 实例,一个分配给 ELB。EC2 安全组应允许 ELB sg 在端口 3000 上进行访问。ELB sg 应允许在端口 80 和 443 上进行全球访问。ELB 不应侦听端口 3000(面向世界),但应将内部端口设置为3000. 如果一切正常,您应该能够在 ELB 控制台中看到您的 EC2 实例运行状况良好。

此外,在健康检查中,不要忘记将其设置为侦听实际返回某些内容的端点,例如 200 OK 状态代码,否则,AWS ELB 将假定与 EC2 实例没有连接。

于 2020-05-01T13:48:13.790 回答