Nginx:proxy_pass 动态来自位置

Nginx:proxy_pass 动态来自位置

我希望你能帮助我解决一个小而棘手的 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地址;
}

就这样。

相关内容