前言
在检查服务器日志时,发现 nginx 的 access_log 出现大量 400 错误的请求。
排查
查看 access_log 日志,发现出现访问路径都为/hi,推断可能是负载相关的问题。
查看阿里云负载配置,发现健康状态异常,检查路径为/hi。
通过 postman 进行请求,发现响应正常。
查阅 阿里云-配置健康检查文档,关于 健康检查路径和健康检查域名 的说明,“如果没有配置域名,SLB 则不会在请求中附带 host 字段,因此健康检查请求就会被服务器拒绝,可能导致健康检查失败”。
在 postman 中去除 headers 中的 host 字段进行请求,发现响应 400,问题复现。
查看RFC 文档 得知,http1.1 的标准规定请求头部必须包含 host 信息,如果为空就直接返回 400。
解决
根据以上问题 以及 阿里云-配置健康检查文档,对健康检查域名进行配置即可解决问题。