我希望你能帮助我解决一个小而棘手的 nginx 问题:
我想配置一个像这样的动态位置块:
location /test1/* {
proxy_pass destination.com/api/*;
proxy_buffering off;
}
如果 URL 是.../test1/folder1
请求应该传递给destination.com/api/folder1
我已经尝试用这个变量了$request_uri
proxy_pass destination.com/api/$request_uri;
——但它对我来说不起作用。
编辑:网站“/test1/”本身不应重定向 - 仅重定向“/test1/”之后的部分。这怎么可能呢?
更新 2016.11.02:仍然没有解决方案 :(
感谢您的帮助/回答!
答案1
你不需要*
在 中location
。但你必须在 中有协议proxy_pass
。这应该可行:
location /test1/ {
proxy_pass http://destination.com/api/;
proxy_buffering off;
}
答案2
您可以在将 URI 传递给服务器之前重写它,如下所示:
location /test1/ {
proxy_set_header Host destination.com;
proxy_redirect http://destination.com/api/ http://$http_host/test1/;
rewrite ^/test1/(.*)$ /api/$1 break;
proxy_pass destination.com;
}
希望这有帮助。
更新:添加 proxy_set_header 以将 Host 更改为正确的域名。如果需要,还可以添加 proxy_redirect 以更正响应标头中的 Location。
答案3
我找到了一个简单的解决方案。3 个位置块:
location = /test1/ --> 保持本地
proxy_pass local-upstream$request_uri;
重写 ^(.*) localdomain;location = /test1 --> 保持本地
proxy_pass local-upstream$request_uri;
重写 ^(.*) localdomain;位置 /test1/ {
proxy_pass destination.com/api/;
}
上游在主配置文件中定义:
上游本地上游{
服务器ip地址;
}
就这样。