Nginx返回400 Bad Request故障排查

系统环境

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

打开客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx 400 Bad Request是指在使用Nginx服务器访问网站或资源时,请求出现错误或无效,导致服务器无法正确处理请求,从而返回400 Bad Request错误响应。出现这种情况的原因通常是客户端发送的请求数据格式或参数错误,或者请求的资源不存在或被服务器拒绝访问。 要解决这个问题,我们需要排除以下几个可能的原因: 1. 请求数据格式错误。如果请求数据格式不正确,如头部数据错误,那么服务器将无法正确解析请求。此时,需要检查请求头、请求方法、请求参数等是否正确,并根据需要进行修正。 2. 请求参数错误。如果请求包含不合法的请求参数,例如访问不存在的页面、使用不支持的请求方法等,通常会导致400 Bad Request错误。解决这种情况需要检查请求参数是否正确,确保参数的数据类型、格式、取值范围等都符合要求。 3. 资源不存在或被服务器拒绝访问。如果请求的资源不存在,或者被服务器拒绝访问,那么就会出现400 Bad Request错误。解决这种问题需要确认请求的资源是否存在,以及是否被服务器正确配置和授权访问。 综上所述,出现Nginx 400 Bad Request错误是因为客户端提交的请求出现错误或无效。要解决这个问题,需要检查请求数据格式、请求参数、请求的资源等是否正确,确保这些因素都符合服务器的要求。另外,可以考虑使用Nginx日志来记录详细错误信息,以便在遇到问题时能够快速进行排除和修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值