真没见过这种问题,求帮助

2023-07-17 08:29:19 +08:00
 dust0522
前提:公司有两台转发服务器,一台 nginx ,一个 IIS 服务,有一个用户信息图片上传接口,已经稳定运行 2 年。
现在有一个用户上传的报文,发到哪个服务器上,哪个服务器就会断连大概 3-5 分钟左右。
报文格式就是 JSON 加 base64 ,因为图片涉及用户身份证信息没法发。
服务器端没有错误日志。
抓包的看了下,上面是正常 tcp 分片的报文,下面突然是客户端突然没应答了?但是服务端已经收不了请求了。
请求第一次响应 read ECONNRESET 然后再请求响应啥都是 connect ECONNREFUSED
整崩溃了。
[Imgur]( )
4066 次点击
所在节点    程序员
29 条回复
dust0522
2023-07-17 08:35:41 +08:00
报文也不大就 214KB
leaves615
2023-07-17 08:36:51 +08:00
模拟测试下的 json 不同包大小,找临界点。有可能是网络 cache 或者什么参数超出。导致无法处理请求。
dust0522
2023-07-17 08:44:33 +08:00
对了,nginx 会报这个,[info] 407539#0: *6273 recv() failed (104: Connection reset by peer), client: 客户端地址, server: localhost, request: "POST /hk/bms-front/agentMerchantUploadImage HTTP/1.1", host: "服务端地址"
dust0522
2023-07-17 08:46:38 +08:00
@leaves615 我试试,找不到有用的日志,很头疼
wuruorocks
2023-07-17 08:50:04 +08:00
也许服务程序有 bug ,处理这种请求时挂掉了? 能复现就还好办
dust0522
2023-07-17 08:52:43 +08:00
跳过转发服务器,直接请求程序是没问题的,现在在测试上还复现不了,还在搭环境
leaves615
2023-07-17 08:55:17 +08:00
@dust0522 #3
上游服务器/应用的问题。 一般有以下情况问题:
应用 tcp 队列满了,未及时释放。
应用 tcp 缓冲区满了,未及时释放。
系统 tcp 队列满了,未及时释放。
系统 tcp 缓冲区满了,未及时释放。

调优相关参数。 一个一个测试。 这种问题,除非把网络 debug 日志开启来查询,在应用层是看不出具体问题。


-------
前段时间处理过 服务器间歇性无法连接( rst )。 最终定位就是 linux tcp 队列满了未及时释放导致的。
liuidetmks
2023-07-17 09:11:21 +08:00
有没可能那个用户在攻击?屏蔽即可,别费脑子了
vainl1
2023-07-17 09:18:44 +08:00
换另外一个用户上传该报文,是否复现?
该用户上传其他报文,是否复现?
如果第一个答案为是,第二个为否,可能为触发了某防火墙规则,链接被重置了。
之前在某 cms 后台上传模板文件,网站模板中包含边境区域地名,出现类似情况,删除模板中该地区后模板即可正常上传。其中服务器位于北京,网站域名也已经备案过。
dust0522
2023-07-17 09:22:36 +08:00
是,否。报文都是 base64 的图片数据 @vainl1
dust0522
2023-07-17 09:23:19 +08:00
@liuidetmks 我也想给他 ban 了,但是在领导那说不过去啊,base 的图片也能植入攻击吗
nenseso
2023-07-17 09:37:07 +08:00
mark 一下,如果测试环境不能复现,会不会是那个客户的网络问题,上传图片过程中自己掐断的呢?
yulgang
2023-07-17 09:37:44 +08:00
Nginx 是不是设置了 proxy_buffering ,把内存耗光了。
vainl1
2023-07-17 09:40:34 +08:00
@dust0522 那基本可以确定为触发了某防火墙规则,可能的话在上传之前对数据再做其他形式的编码或加密,接收后再解码或解密。
另外顺带一提,利用此规则直接发送此类的数据包,可以很容易制造 DOS 攻击,而且直接单个发包即可达成攻击。
littlefishcc
2023-07-17 09:42:16 +08:00
能复现的问题都不是问题。
构建一模一样的数据包发给服务器看是否能复现,如果能复现,那么不断屏蔽业务功能,不断缩小范围,总能找到问题。

如果不能复现,那就只能要用户帮忙测试了,先确定大的方向,再不断排查。
sadfQED2
2023-07-17 10:06:02 +08:00
把请求录制下来?只要能够稳定复现,那就很好调试了
dust0522
2023-07-17 10:11:13 +08:00
@vainl1 感谢,中间防火墙给拒绝了
dust0522
2023-07-17 10:11:27 +08:00
@nenseso 防火墙干的
dust0522
2023-07-17 10:16:54 +08:00
@vainl1 防火墙这个规则咋触发的,真离谱啊。。。
Pythoner666666
2023-07-17 13:00:43 +08:00
有点意思啊,base64 之后 怎么能够处罚防火墙的的规则

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/957240

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX