【nginx】反向代理时,url中包含转义字符导致400 bad request问题

现象

我在nginx中,拦截了/api/相关接口,将此链接转到对应的9091端口进行处理。

然后前台调用的时候,返回bad request 400的错误

我将url中api前的端口号,人工加上之后,拼接了127.0.0.1:9091/api/……,测试是成功返回的

但是前台传入的127.0.0.1/api/……,处理失败。

由此,判断是nginx出现了问题

将url中的特殊字符全部删掉,发现nginx是可以正常跳转的,由此判断,是url出现了问题

解决

之前nginx的跳转逻辑如下:

location /api/ {       
	proxy_set_header Host $http_host;       
	proxy_set_header X-Forwarded-Proto $scheme;       
	proxy_set_header X-Real-IP  $remote_addr;       
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;       
	proxy_pass http://127.0.0.1:9091/;
}

通过查询,发现nginx可以实现不处理url后续的参数,直接转发,将判断逻辑做如下修改

将
	proxy_pass http://127.0.0.1:9091/;
改为
if ($request_uri ~* ^/(.*)$) {          proxy_pass http://127.0.0.1:9091/$1;       }
不对url进行处理

成功回调


版权声明:本文为xuexiiphone原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。