一、前言
于今天即将下班之际,研发同时突然反馈某项目开发环境调用java后端服务出现502....据悉,就在前几天都是正常,今天发版上线之后就出现这种情况,而且故障出现之后根研发自行调用后端服务接口是没问题的....
随即我这边开始展开紧急处理
二、排查思路
首先对于502错误通常表示服务器作为网关或代理时从上游服务器接收到无效的响应。这意味着上游服务器无法提供有效的响应给网关服务器
分析502状态码,那些原因可能会导致这种情况的发生
网络问题:nginx负载器到后端服务端口不通,网络连接异常会导致
系统问题:前后端服务器的磁盘问题,也会间接性的导致502的发生
上面两种可能性是经常会发生了,第一时间做了排查,首先检查了前端代理到后端java服务的端口是否正常
如下图所示,网络连接是正常的,随后检查了两台服务器资源的,都没有问题
此时就感觉很奇怪,随后我个人尝试确认不走nginx这一层代理直接本地调用后端该接口从而判断后端服务是否异常
curl http://x.x.x.x:[后端java端口]/[接口路由]
果然,正如研发所说,它的后端java 服务是没有问题了(研发说,这个锅我可不背......
此时我陷入了深思,不是网络问题,不是系统问题,后端服务也正常....于是我进一步追踪了一下前后端的日志
我先看前端的nginx日志信息,检查一下前端的路由请求否正常打到后端
跟踪一下前后端日志,可以发现用户请求正常打到后端服务,说明nginx路由是没有问题的
百思不得其解,此时突然想到了nginx日志除了access日志,还有一个error日志,说不定在这上面找到一些蛛丝马迹....
于是乎立马查看了error.log
tail -f error.log
嘿! 好家伙,果然露出了马脚....
2023/08/29 18:21:15 [error] 16200#0: *866959 upstream sent invalid chunked response while reading upstream,
问题显而易见, 看error说nginx上游读取上游时发送无效分块响应.....
三、解决问题
直接在nginx.conf配置加上
proxy_http_version 1.1;即可
四、问题总结:
这个问题与其说是nginx报错,不如说是不了解http不同版本之间特性的差异.而且要记住一点的是nginx代理后的默认http版本是1.0.如果原始请求是长连接或者分块传递,记得加上http1.1的参数...
标签:HTTP,....,nginx,版本,error,服务,日志,502 From: https://blog.51cto.com/u_11880730/7279614