记录一次nginx日志偶现502报错排查

背景

之前的业务链路
负载均衡–>nginx–>cvm(业务后端node)
上云后链路
负载均衡–>nginx–>pod(业务后端node)

上云后nginx日志隔几个小时就出现一波502,查看nginx的日志有两个特征,就是request_time=0,upstream_response_time=0,当时的第一个反应就是nginx这里出了问题,因为后端确实也没有日志。

近一天日志

在这里插入图片描述
发现只要触发502了,502主要集中在1分钟(其实当时从这里就应该敏感的发现fail_timeout=60s)


根据502产生的时间,查询nginx的error日志,如下所示:

error.log日志

在这里插入图片描述
从nginx日志可以看到,upstream的地址竟然一个是ip一个是new_node_vip(因为单独的配置了upstream文件,所以理论上这里是会映射出IP的),然后查询现网status:200的日志。


status:200日志

记录一次nginx日志偶现502报错排查_第1张图片
到这里虽然知道是upstream 配置的变量没有映射为IP导致的问题。但是还不知道怎么解决。


原因定位

最后还是从nginx的报错信息可以确认是上游也就是node那里发送的断开连接
upstream prematurely closed connection while reading response header from upstream,最后联想到了nginx默认有配置长链接超过60s会发起断开,因为上云后配置的vip只有2个,所以就出现了两个同时达到了max_fails=1的阈值,导致此刻没有upstream的后端地址,最后nginx就返回了502。

问题解决

1、增加max_fails次数,让nginx可以多次重试
2、增加后端pod的数量

参考文章:
nginx长链接导致502

你可能感兴趣的:(nginx,服务器)