504 请求超时 Nginx 在一周后proxy_pass到 AWS ALB 私有子网

504 request timeout Nginx proxy_pass to AWS ALB private subnet after a week

提问人:Đức Minh 提问时间:11/8/2023 最后编辑:AndromedaĐức Minh 更新时间:11/14/2023 访问量:57

问:

目前,我在私有子网上有 2 个 api 服务器,并将其路由到 ALB。 我在公有子网上的 Web 应用程序,我配置 nginx 代理来调用 api,如下所示:

  location /api  {
    proxy_pass $my-alb-address
  }

起初,它就像一个魅力。但是,2 周后它有 504 错误。当我在 Web 服务器上时,我可以直接“卷曲”到我的 ALB,但不能通过我的 nginx proxy_pass,它错误为 504:

重新启动nginx后,它似乎又可以工作了。但是在2周后,错误仍然发生。

我不知道为什么。我认为我应该创建指向我的 ALB 的新 VPC 链接并直接调用它,但不确定。

节点.js 亚马逊网络服务 nginx

评论


答:

0赞 Quassnoi 11/8/2023 #1

ALB 没有静态 IP 地址

Classic Load Balancer 和 Application Load Balancer 的 IP 地址会随时间而变化。请勿使用此信息将应用程序静态配置为指向这些 IP 地址。

从理论上讲,当它发生变化时,它会提前宣布,旧的应该工作到它在 DNS 条目上的 TTL 到期。Nginx 应该为这些设置增光添彩

但是,在这种组合中可能有些东西不起作用。在这种情况下,Nginx 将尝试连接到 ALB 的旧 IP 地址,这可能会导致您看到的 504(HTTP 网关超时)错误。这也解释了重新启动如何修复它。

您可以将 NLB 放在 ALB 的前面。NLB 确实具有静态 IP 地址。

评论

0赞 Đức Minh 11/15/2023
非常感谢。您的解决方案运行良好
0赞 Đức Minh 11/18/2023
我还有一个问题。我将DNS指向ALB并通过它进行代理,但问题仍然存在。将 ALB 更改为 NLB 只是解决方案吗?
0赞 Quassnoi 11/18/2023
@ĐứcMinh:这是一个很好的后续问题。问吧!