记一次HTTP劫持故障排查
问题起因:公司某内部系统,产品反馈,客服使用过程速度变慢,跳转过程中还会有一片留白页面出现
1、实际排查发现,这个问题不是必现的,大概每点击5次会出现 2次;查看后台ng日志,发现大量499错误;ng 499错误,有两种情况,一是请求时间过长,客户端主动关闭连接,
二是 同一个url请求间隔时间过短,直接被ng拒绝;随即检查ng配置,并对比了测试环境配置和正是环境配置(因为测试环境没有这个问题),
针对第一种情况,在测试环境特地sleep了10s;修改了某些配置,想屏蔽499错误;人有时候很奇怪,会刻意忽略某些情况,第一种排查完了之后,第二种就被忽略了;然而,一顿操作猛如虎,一看结果二百五;
2、引入外部某大神帮助,他提出可能是php错误,因为499 还有一种情况会出现,那就是php-fpm进程数不够,刚好我们线上环境因为某些原因起了3个版本的php,
遂关闭了其中一个无用的php版本,并开启了线上php 慢日志查询,然而,查看进程数也足够,所以并阮;
3、既然后端问题无法定位,那么就找代码本身是不是有问题,一看代码是,因为是多人合作的原因,有vue和jq混合,刚好查到因为某些情况这种混合编码可能会引起499错误,遂把vue代码全部删除,还是一样;
4、能想到的所有的情况都排查了,还是无效,内心是奔溃的,然而天无绝人之路,点着点着,突然发现,前端为什么会连续请求了我们同一个url 3次呢?想不明白,遂请求前端某大神帮助,他号称是世界上最温柔的男人;
一顿操作猛如虎,终于找到了,有段异常的js,flash.js ,上网找了一些文章,具体可查看 https://www.xuab.net/archives/36.html, 发现原来这个js在某些情况写会劫持我们的url( 具体可能是url中带// 的);
遂问网关,经确认网关那边确实有一套深信服的上网行为管理系统;这套系统在开启某些策略的情况,会在某些情况把这段js注入的我们请求页面中,谷歌浏览器有开启拦截广告的插件,就有几秒钟的留白;网管关闭这个策略后,回复正常;
总结,历时3个小时排查,终于找到问题,不容易;排查这类问题的时候,感觉方向没找准,浪费了不少时间,一开始应该不要从后端啊,代码去排查,应该从最明显的地方,前端去找,把最明显的问题找到原因,如果行不通,再一步步深入