记一次前端显示504后端200的异常处理

乡下的树 2022年02月15日 1,039次浏览

开发反馈短视频平台,上传大文件(478MB)显示504超时,而且超时时间不超过10分钟

1.检查nginx proxy配置,proxy_send_timeout和proxy_read_timeout都设置了600s,排除
image.png
2.检查nginx日志,显示请求都是200,确认没有问题
f951ad078ac83292e5765fa693c5246.png
3.怀疑504超时的请求没有进来到nginx,于是带参请求测试(方便确认跟踪请求)
发现前端显示504,后端nginx日志显示200,这说明请求是正常到nginx上的
跟开发沟通确认,前端显示504,但后端文件是上传成功的
clipboard.png

clipboard.png

7e24e9f816211141dc070fad6cf9cec.png

4.既然文件上传成功,但504是哪个返回的?
使用fiddler在客户端抓取postman的请求情况,发现“服务器请求”和“服务器开始响应”之间一超过60s,前端就出现504的异常,基本可以确认是服务端超时导致
clipboard.png

5.既然是服务器响应的504,nginx端检查正常,那么就是阿里云负载SLB返回的504
检查SLB超时配置,这里连接请求超时时间默认为60s,修改为180s
clipboard.png
6.重新上传文件,正常,问题解决
clipboard.png
抓包显示 “服务器请求”和“服务器开始响应”之间时间为2min10s左右
clipboard.png

说明:正常情况下不会存在这个问题,因为SLB的后端服务器一般为内网服务器;
本次的异常是因为我们测试环境服务器在本地机房,没有单独的ip分配80端口使用,所以通过线上阿里云服务器的nginx 反向代理proxypass到本地机房服务器上的nignx,也就是SLB的后端服务器为远程服务器,网络传输受限,所以导致上传文件超时。
clipboard.png