Nginx返回400 Bad Request故障排查

这篇博客介绍了在K8s集群中使用Nginx Ingress Controller并支持http2时遇到的400 Bad Request错误。故障表现为Nginx偶发返回400,大部分请求正常。排查过程包括复现故障、开启Nginx Debug日志,发现客户端golang http2 client请求body缺失。通过开启客户端debug模式,发现请求数据未发出。最后,依据GitHub上的讨论,定位到golang源码问题并解决。
摘要由CSDN通过智能技术生成

系统环境

服务端: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)查看客户端问题

打开客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值