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

时间:2012-01-12 16:51:58

标签: 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/another/example

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

任何想法?

1 个答案:

答案 0 :(得分:11)

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

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

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

    }

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