网页接口偶发性502的问题
现象:
网页接口一直偶发性502,概率大概20%左右
排查过程:
架构是用户->WAF->lvs->NGINX->后端
1、尝试减少接口请求,依然会502,可知和接口服务能力无关。
2、WAF侧,更换服务IP,依然不行,可知不是WAF某个节点网络有问题。
3、Nginx侧,查看日志,并未发现502日志,可知502的请求没到nginx,怀疑是waf就没发请求过来。
4、直接请求源站和nginx都不会出现502现象,但经过WAF就会有502。
4、抓包排查,在WAF侧抓包
从waf侧抓到的包看,waf与源站成功建连,waf发起post请求后,源站58.220.164.203 响应了一连串的RST包。这时203源应该没把请求转发给nginx,需要看下 203源响应RST原因
在nginx侧抓包
请求响应都正常,这样验证nginx日志没有502.
在LVS侧抓包
确实LVS机器会发送RST终止TCP链接给WAF
初步定位原因:
【问题描述】 域名通过waf节点访问概率性响应502,访问源站正常。
【问题原因】WAF节点默认使用连接复用回源,源站不支持连接复用,RST这部分请求,导致WAF响应502。
【建议解决措施】
1、源站开启支持连接复用,规避WAF回源失败概率性502问题。
2、WAF侧针对域名粒度关闭回源连接复用,采用单连接回源,规避概率性502问题。
查看内核TCP长连接时间设置
# sysctl -a | grep net.ipv4.tcp_keepalive_time net.ipv4.tcp_keepalive_time = 1200
查看LVS的配置
确认是LVS的tcp长链接时间5S过短
# ipvsadm --set 7200 120 300
修改后验证,502现象消失。
wireshark抓包,异常数据分析常见RST介绍
https://www.jianshu.com/p/6542a066f41b