开发同学在自己电脑上使用Nginx反向代理访问后端tomcat接口时一直提示400错误,查看其nginx配置,转发配置的没有问题,查阅资料发现是"_"引发的问题,由于新版tomcat将带有"_"的请求列为非法,所以会返回400错误。所以解决400错误就是要解决下换线。这里有两种方法。
1. 修改upstream名称,去除下划线
原upstream配置:
upstream api_dev {
server x.x.x.x:8080;
}
修改后upstream配置:
upstream apidev {
server x.x.x.x:8080;
}
2. 添加代理配置(proxy_set_header HOST $host)
由于nginx在没有配置(proxy_set_header HOST $host)的时候,在转发http请求的时候会默认把upstream的名称作为Host头部的内容。所以要么按方法一修改upstream名称,要么就在代理中加上(proxy_set_header HOST $host)配置。
总结:
在web系统中尽量少使用"",这里踩了一个坑,前面也遇到过由于header中带有""的参数通过nginx后后端无法拿到数据的问题,所以慎重使用"_"以减少奇奇怪怪的问题。