系统环境
服务端:K8s集群使用Nginx Ingress Controller,并且支持http2
客户端:golang version 1.9.2,且使用http2
故障现象
Nginx偶发400 Bad Request,绝大部分请求正常返回200
故障排除步骤
(1)故障复现
使用golang http2 client,每个请求post相同的数据,直到response 400;查询nginx日志,response为400时,对应的request_length明显小
(2)开启nginx debug
本文使用的是Nginx Ingress Controller,开启debug的方式如图所示,修改deployment,增加参数“--v=5”,不过要注意,修改deployment后容器会重启,本文复现故障是在测试环境中。
根据response为400的时间,发现这样的info级别日志:client prematurely closed stream: only 0 out of 1125 bytes of request body received
即nginx收到的http header content-length是1125字节,但是http body里却是0字节
(3)查看客户端问题
打开客