Nginx 返回 502异常排查定位 (no live upstreams while connecting to upstream)

问题出现:

线上异常告警,如图:

总的来说,就是各种对外接口频繁出现偶发性的商户请求不通,同时集中在同一项目部署的应用,Nginx 502 告警,并报错日志 no live upstreams while connecting to upstream。

排查过程:

顾名思义:这个报错是没有上游可用,但是是什么原因导致呢?对于Nginx而言,出现这个报错存在很多的可能性,大致可以有:①Nginx资源不足 ②上游服务器异常 ③上游应用业务异常 等等。 

然后排查过程中,需要思考的因素蛮多的,首先运维很快就排除了①,有同事提议可能性②:可不可能是并发导致上游应用资源不足? 导致tomcat连接数不足?详情可以参考此文章:https://www.cnblogs.com/zjfjava/p/10909087.html

我看下了当时的并发数,可以很快推定,不是这个原因导致的。所以原因②几乎不成立。所以重点回到③。然后大伙查日志发现Nginx还有个很重要的信息。如图:

 

 upstream server temporarily disabled while connecting to upstream。这个报错就很清楚明了,Nginx常规报错。初步判断是上游业务异常。

接下来顺藤摸瓜,开始排查对外接口,然后有一个接口,这里别名为 A。A接口感觉是我们不常用,为啥频繁出现请求,然后有看下参数,发现都是空传。初步判断是被攻击了。然后对A接口进行剖析(当然A接口已经被强制下线),发现报错mybatis,同时返回状态码为 500 。如图所示:

原因是A这个接口请求返回500,Nginx标记A所在上游不可用,然后轮询所有的上游都不可用,有其他的请求进来,Nginx直接返回502,内部报错无可用upstream。

再后来,运维通过修改 Nginx 的 max_fails = 0。也验证我们排查问题的结论。

总结: 

①发生问题的原因是我们那个对外接口处理逻辑不正确,即商户请求进来并不是常规的验签验参(如果验签验参不通过,系统是会返回常规错误码 200),而是直接请求了数据库。上述问题相当于查全表操作了,才导致Mybatis报错,返回错误码 500,引发一系列的问题。同时也引发了我写代码的思考:程序编程的时候,我们不单单要考虑如何实现业务,也要多一份思考去防止被攻击以及性能等的可能性。本次异常具体原因:https://www.jianshu.com/p/6cf9bab3de50

②排查问题是时候,都是和运维小伙伴一起排查,相互指引完成的。所以排查问题的时候,不能局限自身,多看各方意见,才能快速定位并解决问题。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当在压测nginx时,出现"no live upstreams while connecting to upstream"错误通常是由于nginx配置中的upstream服务器无法正常连接导致的。这个错误表示nginx无法找到可用的上游服务器来处理请求。 要解决这个问题,你可以采取以下几个步骤: 1. 检查upstream配置:首先,确保你的nginx配置文件中的upstream块正确配置了上游服务器。检查上游服务器的IP地址、端口号以及其他相关参数是否正确。 2. 检查上游服务器状态:确认上游服务器是否正常运行并且可以响应请求。可以使用telnet或curl等工具测试上游服务器是否可用。 3. 检查防火墙设置:确保防火墙没有阻止nginx与上游服务器之间的通信。检查防火墙规则,确保允许nginx与上游服务器之间的流量通过。 4. 检查DNS解析:如果你在upstream配置中使用了域名而不是IP地址,确保DNS解析正确。可以尝试使用nslookup或dig等工具来验证域名解析是否正常。 5. 检查负载均衡策略:如果你在upstream配置中启用了负载均衡策略,确保策略设置正确。可能需要调整负载均衡算法或权重设置。 6. 检查日志文件:查看nginx的错误日志文件,通常位于/var/log/nginx/error.log,以获取更详细的错误信息。日志文件中可能会提供有关连接问题的更多线索。 如果以上步骤都没有解决问题,你可能需要进一步检查网络配置、服务器资源等方面的问题。如果问题仍然存在,可以提供更多详细信息以便我能够给出更具体的建议。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值