本文介绍: 服务 A 的请求先经过 Nginx, 再由 Nginx 转发到 B。而异常的用户的请求到了 Nginx, Nginx 直接返回了 400, 从而导致用户请求异常。通过查询资料, Nginx 报 400 的场景如下request_uri 过长超过 nginx 配置大小cookie 或者 header 过大超过 nginx 配置大小空 HOST 头content_length 和 body 长度不一致我遇到的情况就是第一种。
1 结论
按照惯例直接说结论。
没错, 一个 Get 请求, 入参是一个 List。
同时有另一个后台服务 B, 里面有段逻辑会通过 RestTemplate 调用服务 A 的这个接口, 代码如下:
在服务 B 中, 通过 batchGetUserInfo 方法请求服务 A 时, 传入了一个长度为 122 的 List, List 中每一项是一个 32 位的 UUID。
结果导致调用服务 A 的 url 长度太长, Nginx 认为这时一个异常的请求格式, 直接返回状态码 400, 结构导致服务 B 逻辑异常。
2 过程
2.1 反馈
2.2 定位到直接原因
2.3 Arthas 排查
2.4 Nginx 直接返回 400 错误码
2.5 验证
3 总结
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。