1. 线上遇到一个非常奇怪的bug,为一个用户分配业务线类型后,该用户登录时,提示502,但其它的用户登录完全是正常的
2. 问题现象
3. 排查思路
- 先去看线上日志,看是否有error,但日志里边这个接口200正常返回
- 本地debug,也复现一样问题,在分配角色类型超过22个总数时就报错
- 怀疑长度问题,因为我们是基于jwt的token认证方式
- 看下login之后签发的token特别长,有没有可能是token的问题呢?
- 查看线上ng日志,发现报错:
2023/09/13 05:46:42 [error] 23#23: *80 upstream sent too big header while reading response header from upstream, client: xxx.xxxx.xxx.xxx, server: yyy, request: "POST /api/menu/get_menu HTTP/1.1".
确认token长度是已超4kb大小, - 我们线上是ng代理,ng对于请求header的长度也是4kb限制
- 最终因为业务代码在jwt的Claims添加了额外用户信息,这个会导致随着分配用户越来越多的bizType签发的token长度增加,最终超过4kb的总大小,导致ng出现502的错误
4. 解决方案
- 修改ng配置,添加以下配置
# http段添加如下内容: proxy_buffer_size 128k; proxy_buffers 32 32k; proxy_busy_buffers_size 128k;
- 把token的签发,移除bizType数据