nginx大量400请求

前言

在检查服务器日志时,发现 nginx 的 access_log 出现大量 400 错误的请求。

排查

查看 access_log 日志,发现出现访问路径都为/hi,推断可能是负载相关的问题。

查看阿里云负载配置,发现健康状态异常,检查路径为/hi。

通过 postman 进行请求,发现响应正常。

查阅 阿里云-配置健康检查文档,关于 健康检查路径健康检查域名 的说明,“如果没有配置域名,SLB 则不会在请求中附带 host 字段,因此健康检查请求就会被服务器拒绝,可能导致健康检查失败”。

在 postman 中去除 headers 中的 host 字段进行请求,发现响应 400,问题复现。

查看RFC 文档 得知,http1.1 的标准规定请求头部必须包含 host 信息,如果为空就直接返回 400。

解决

根据以上问题 以及 阿里云-配置健康检查文档,对健康检查域名进行配置即可解决问题。