• 问题现象: 昨天突然收到运维同事的日志报告,描述说有线上A服务 转发到主站首页 流量突增。日志报告如下: 

wKiom1ZVHxOyPjrFAALWC5Z4lOo661.png

  • 现象分析 :1、由固定A机器IP 转发至 网站主页

                   2、UA 出其的一致 (初步考虑抓包程序)

                   3、每秒访问量达到300次


  • 解决问题 :

1、查看A机器服务所有到 主站首页的流量如图:

关于nginx 代理转发 造成的流量突增_第1张图片



2、发现相关服务确实有转发到首页的服务 程序为 appapserver.py  查看相关代码发现:

有转发到 ucloud B 虚拟机 上的日志、但是并没有发现往首页转发的流量


出现困惑 。。。。


3、仔细查看运维日志 发现 应该是http 协议发的请求 ,上述方法求证是tcp转发。问题再度定位是nginx 代理 出现的问题 查看A 机器上nginx 配置 : 

wKioL1ZVJRqxqP3_AAEp0N8rcT8019.png


4、果断屏蔽跳转 后重启nginx 服务 查看运维监控是否还有 A机器到主页的流量 。- _ -  ! 问题依旧存在 .

5、开始费解 是否为nginx 问题 ,为求证是否为nginx 转发带来的问题 ,采取切换keepalived 主从切换 nginx 负载 切到另一套 备机C上去。结果发现运维监控报流量是从C机器 跳转过去。

可以确认问题 一定是 nginx转发的问题。


6、仔细查看nginx配置 确实只有上述一处转发,转发前有 accesslog 日志文件 index.access.log 文件 访问量没有明显突增 (问题1),理论上不应该这样。开始测试 通过浏览器 手敲 A机器的虚ip 发现 

index.access.log  有对应的日志出现 但是依然跳转到 首页主站(问题2) ,明明禁用了rewrite跳转。


7、针对以上两个问题,猜测nginx 浏览器端 有本地缓存 ,开启浏览器调试模式追踪问题 发现 直接用虚ip访问时 ,返回301 错误。这是清空浏览器缓存 后从新用虚ip访问 发现不能跳转到首页,返回304。

针对以上现象 发现nginx 存在本地混存,是否因这个原因用户还会直接访问到首页主站 ,为求证,上网搜了下 配置  , 添加nginx header no-cache 配置 修改如下图: 

关于nginx 代理转发 造成的流量突增_第2张图片  

8、重启动 nginx ,从新执行浏览器测试步骤后 发现浏览器不能访问 首页。 开心的去看运维监控 。。。-<>- !   问题依然存在 。。。。。


9、再次反思 。。。通过虚ip 直接访问的可能为抓包问题 ,正常情况不会有这种用ip直接访问的用户,而且UA头出其的一直 考虑抓包可能。但是为啥 nginx access log 却没有量。


10、仔细观察 nginx 配置文件 好多 upsteam 转发 ,upstream 后端有很多服务 有日志采集 、算法推荐、各种平台。。。在之前仔细问了下同事都说没有往 首页转发过请求。。。再次费解。。。@_@ ````


11、仔细过滤后端服务后 再次发现 上文中 appapserver.py 脚本 有跳转到 ucloud 虚拟机上的请求,这是个测试环境 大家都可以随意改动 ,当时为了实时日志处理消息测试 spark 集群做测试用的转发。


12、果断查看了下ucloud 上虚机上的配置 发现 nginx 依然有这个首页的跳转流量 ,并且有accesslog 。额 问题终于找到 。。。屏蔽掉虚机上nginx服务 。再次观察 运维监控 。A 机器流量没了 。。。~~~~(>_<)~~~~   


13、问题虽然有已经解决 ,但是依然存在如下疑问。纠结的程序员。


  • 待解答疑:

1、为何监控日志中 显示的ip 是A 机器的 ,而不是虚机的 ??

2、为何所有UA头出其的一致 ???

3、为何每秒日志量这么大???

4、监控日志中 请求体都是 / 空的 但是虚机上accesslog 请求体都是 /open ???

回答

1、 A机器 upstream 代理转发 配置了 proxy_set_header X-Real-IP $remote_addr; 。

2、 appapserver.py  脚本中构造了 假的固定的 UA头信息 。

3、 虚拟机nginx 配置 改动 ,导致好多流量都走了 默认的server host .并发突增。

4、 rewrite 重定向机制 。



折腾了 一天的问题 ,终于所有的情况都搞清楚。 最后只能说 ~~~

规范线上日志流程 , 日志格式,日志转发等需求配置 ,防止各种埋坑。