如何避免nginx在用作代理(proxy\u pass)时用空格替换%20?
我使用nginx作为apache服务器的代理 这是我的配置:如何避免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
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”)。下面的解决方案修复了它。太奇怪了。。。但它像一个符咒!