Nginx反向代理400错误

hcwei 2020年11月11日 499次浏览

开发同学在自己电脑上使用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后后端无法拿到数据的问题,所以慎重使用"_"以减少奇奇怪怪的问题。

详细介绍参考文章:
https://mp.weixin.qq.com/s/A7j4lGshzfg2quE0Tzz8lQ