nginx反向代理时,url中包含转义字符导致400 bad request问题
Posted 小魏的马仔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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进行处理
成功回调
以上是关于nginx反向代理时,url中包含转义字符导致400 bad request问题的主要内容,如果未能解决你的问题,请参考以下文章
java中反向转义org.apache.commons.lang3.StringEscapeUtils.unescapeJava