我刚刚开始从事 AWS 和服务器管理,并且刚刚使用 ECS 和一些容器建立了部署管道。
我的容器:
- 我的主机端口为 0,并重定向到容器端口 4200(Angular 默认端口)
- 位于应用程序负载均衡器后面
- 已分配动态端口
虽然我阅读了端口映射和负载平衡文档,但我无法理解如何自动检索该端口并将其路由到端口 80。我想要的基本上是在 URL 中不指定端口的情况下访问我的网站。
我知道我可以在那里找到默认端口范围: /proc/sys/net/ipv4/ip_local_port_range
我目前遇到的问题如下:
1 - 如何将所选的临时端口映射到默认的 http 流量端口(80)
2 - 如何确保如果端口已在使用中,我仍然可以在临时端口范围内获取正确的端口,以便将其映射到 80。
答案1
难以理解的是,这里实际上有三个端口需要考虑:
- 应用程序负载均衡器 (ALB) 的外部端口 - 侦听器
- 在您的 ECS 集群上运行的 EC2 实例的“主机端口”
- 容器内运行的应用程序的“容器端口”
当您指定“主机端口”为 0 时,就会发生神奇的事情,这是指示 ECS 使用在 EC2 ECS 主机实例上公开的随机临时端口启动容器。允许(例如)您在同一个 EC2 实例上运行同一个容器的两个实例。您实际上不需要了解哪个端口正在使用中(可能诊断除外),因为 ECS/ALB 会负责动态映射它 - 除非您确实需要确保 ECS 实例的安全组允许来自 ALB 的所有临时端口范围 - 否则流量不会从 ALB 传递到应用程序。
4200 的内部容器端口对于每个容器实例可以是相同的,因为它仅在容器本身内部可见。
然后,为了让您的应用程序使用端口 80(以便为您的用户提供无缝体验),ALB 侦听器端口应该是端口 80,因为它是您的用户将连接到的 ALB - 即http://yourapplication.com/是 ALB DNS 名称的 CNAME。
关于此项设置的更多详细信息请参见此处:
和这里:
最后,虽然您的目标是导出端口 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。