记一次http 400错误及解决办法

问题描述

前后端分离项目部署到开发环境后,浏览器发起请求,访问后端接口一直报400错误,而通过浏览器直接访问后端接口可以访问成功

问题定位

根据问题描述可以定位是前端部署nginx出现问题,定位问题和寻找方法经过:

  1. 调大client_header_buffer_size和large_client_header_buffers这两个参数(无效)
  2. proxy_pass反向代理的域名改为ip(不适用)
  3. 空请求导致400问题,将监听的server_name localhost; 改为servername ;(无效)
  4. 通过postman模拟浏览器请求,设置和浏览器访问一下的请求头,逐步勾选取消各项请求头来测试,直到请求正常为止,经过测试发现请求头中勾选的Host取消后请求恢复正常

问题解决

通过上述问题排查,基本可以确定nginx配置文件中如下的问题

1
2
3
4
5
6
location ~ (.*?\/api\/).*$ {
proxy_pass http://ads-report-service.pass.cmbchina.cn
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host; // 取消这行请求恢复正常
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}