Nginx 有时会在上游作为 Amazon ELB 抛出 502 错误网关

Nginx throws 502 bad gateway sometimes with upstream as Amazon ELB

ELB 会动态地向上和向下扩展,因此 ELB 可能会在不同时间解析到不同的 IP 集。 Nginx 缓存上游目标的 IP,这样它就不需要一次又一次地解析主机名。但是当上游 ELB 的 IP 发生变化时(即一些旧 IP 不再是 ELB 的一部分),我们会面临 Nginx 继续将流量转发到不再附加任何目标的旧 IP 的问题。因此,该 IP(VM 或其他)抛出 502 或错误网关,Nginx 也 returns 向客户端发送相同的 502 状态。我们可能会遇到这个问题,因为 Nginx 不遵守 dns 记录的 TTL。

有没有人遇到过类似的问题,如果有,那么他们尝试过的修复方法是什么。

这是许多其他客户的已知问题。这可以通过使 Nginx 的缓存无效以查看上游 ELB 的 IP 是否更改来解决。我们可以在 Nginx 中使用 resolver 指令。 参考 - https://gc-taylor.com/blog/2011/11/10/nginx-aws-elb-name-resolution-resolvers , https://distinctplace.com/2017/04/19/nginx-resolver-explained/