当用作代理(proxy_pass)时,如何避免nginx用空格替换%20?

Tom*_*PAP 5 nginx

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

这是我的配置:

location ~ ^/subsite/(.*)$ {
        proxy_pass http://127.0.0.1/subsite/$1?$query_string;
    }
Run Code Online (Sandbox Code Playgroud)

问题是,如果我发送%20的请求,如mywebsite.com/subsite/variable/value/title/Access%20denied/another/example

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

任何的想法 ?

小智 15

我能够解决类似的问题 - 我们有一个api,要求搜索条件成为URL路径的一部分.将输出直接传递给proxy_pass指令会导致它抛出502即使请求被正确地进行了url编码.

这是我们提出的解决方案:

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

    }
Run Code Online (Sandbox Code Playgroud)

"set"指令似乎保持url编码完整(或重新编码正则表达式在$ 1中传回的内容).