如何避免nginx在用作代理(proxy\u pass)时用空格替换%20?

如何避免nginx在用作代理(proxy\u pass)时用空格替换%20?,nginx,Nginx,我使用nginx作为apache服务器的代理 这是我的配置: location ~ ^/subsite/(.*)$ { proxy_pass http://127.0.0.1/subsite/$1?$query_string; } 问题是,如果我发送一个带有%20的请求,比如mywebsite.com/subsite/variable/value/title/Access%20denied/other/example %20被一个空格替换,apache不关心Access

我使用nginx作为apache服务器的代理

这是我的配置:

location ~ ^/subsite/(.*)$ {
        proxy_pass http://127.0.0.1/subsite/$1?$query_string;
    }
问题是,如果我发送一个带有%20的请求,比如mywebsite.com/subsite/variable/value/title/Access%20denied/other/example

%20被一个空格替换,apache不关心Access/title/Access之后请求的所有结尾


有什么想法吗?

我解决了一个类似的问题——我们有一个api,它要求搜索词成为URL路径的一部分。将输出直接传递给proxy_pass指令会导致它抛出一个502,即使请求经过正确的url编码

以下是我们提出的解决方案:

location ~ /api/search(/.*) {
        set $query $1;
        proxy_pass http://127.0.0.1:3003$query;

    }

“set”指令似乎保持了url编码的完整性(或从regex在$1中传递回来的内容重新编码)。

我发现问题与(.*)和$1有关,这将用代理传递将%20替换为空白;只要你有能力,你就可以/应该回答/接受你自己的问题,这样别人就会知道有解决办法。欢迎使用堆栈溢出。在我的例子中,从.NETCore中出现了错误505(无法识别的HTTP版本:“HTTP/1.0”)。下面的解决方案修复了它。太奇怪了。。。但它像一个符咒!