将临时端口重定向至 80

将临时端口重定向至 80

我刚刚开始从事 AWS 和服务器管理,并且刚刚使用 ECS 和一些容器建立了部署管道。

我的容器:

  • 我的主机端口为 0,并重定向到容器端口 4200(Angular 默认端口)
  • 位于应用程序负载均衡器后面
  • 已分配动态端口

虽然我阅读了端口映射和负载平衡文档,但我无法理解如何自动检索该端口并将其路由到端口 80。我想要的基本上是在 URL 中不指定端口的情况下访问我的网站。

我知道我可以在那里找到默认端口范围: /proc/sys/net/ipv4/ip_local_port_range

我目前遇到的问题如下:

1 - 如何将所选的临时端口映射到默认的 http 流量端口(80)

2 - 如何确保如果端口已在使用中,我仍然可以在临时端口范围内获取正确的端口,以便将其映射到 80。

答案1

难以理解的是,这里实际上有三个端口需要考虑:

  1. 应用程序负载均衡器 (ALB) 的外部端口 - 侦听器
  2. 在您的 ECS 集群上运行的 EC2 实例的“主机端口”
  3. 容器内运行的应用程序的“容器端口”

当您指定“主机端口”为 0 时,就会发生神奇的事情,这是指示 ECS 使用在 EC2 ECS 主机实例上公开的随机临时端口启动容器。允许(例如)您在同一个 EC2 实例上运行同一个容器的两个实例。您实际上不需要了解哪个端口正在使用中(可能诊断除外),因为 ECS/ALB 会负责动态映射它 - 除非您确实需要确保 ECS 实例的安全组允许来自 ALB 的所有临时端口范围 - 否则流量不会从 ALB 传递到应用程序。

4200 的内部容器端口对于每个容器实例可以是相同的,因为它仅在容器本身内部可见。

然后,为了让您的应用程序使用端口 80(以便为您的用户提供无缝体验),ALB 侦听器端口应该是端口 80,因为它是您的用户将连接到的 ALB - 即http://yourapplication.com/是 ALB DNS 名称的 CNAME。

关于此项设置的更多详细信息请参见此处:

如何为 Amazon ECS 设置动态端口映射?

和这里:

使用应用程序负载均衡器在 ECS 中进行动态端口映射

最后,虽然您的目标是导出端口 80,但我强烈建议在负载均衡器上使用 443 上的 HTTPS,因为您可以从 AWS 免费获得 ALB 证书。如今公开的任何服务都应该尽可能使用 TLS (SSL)。

当然,如果您确实希望用户仍然通过 HTTP 访问并重定向他们 - 值得庆幸的是,从上个月开始,您现在可以使用 ALB 上的重定向操作,通过将重定向规则附加到端口 80 侦听器在 ALB 中本地执行此操作。更多详细信息请访问:

应用程序负载均衡器的侦听器

答案2

您可以使用以下命令检查每个端口上正在运行的服务:

  • lsof -i:端口-S
  • netstat -a | grep 端口

至于你问题的主要部分,我会使用 nginx。你可以在 localhost:someport 上运行 angular,并将 site.com:80 代理到 localhost。

相关内容