在重定向之前修剪NGINX中的URL

时间:2013-12-10 07:30:12

标签: nginx

我可以将ngnix配置为将http://mydomain/group1重定向到'Group1'服务器,将http://mydomain/group2重定向到'Group2'服务器。但是我需要修剪组名并将剩余的URL传递给后端服务器

即,

http://mydomain/group1/index.html

应该被重定向到'Group1'服务器http://mydomain/index.html,类似于'Group2'

这可能吗?

以下是我的配置文件

        upstream group1 
    {
        server 10.18.1.10;
    }
    upstream group2 
    {
        server 10.18.1.11;
    } 

    server 
    {
        listen       80;
        server_name  10.18.1.9;

        location /group1/ 
        {
            proxy_pass http://group1;
            proxy_redirect     off;
            proxy_set_header   Host       $host;
            proxy_set_header   X-Real-IP  $remote_addr;
        }

        location ~ /group2/(.*) 
        {

            proxy_pass http://group2.$http_host/$1;
            proxy_redirect     off;
            proxy_set_header   Host       $host;
            proxy_set_header   X-Real-IP  $remote_addr;

        }

    }

1 个答案:

答案 0 :(得分:2)

尝试这样的事情:

location ~* ^/group(\d*)/(.*) {
      proxy_pass http://group$1.$http_host/$2;
}

这个snipplet的作用是捕获所有匹配regexp模式的请求 ^/group(\d*)/(.*)表示“获取所有以/ group /开头的内容”,同时捕获Group之后的数字以及斜线变为变量之后的尾随部分。变量是按“捕获”顺序排列的数字。因此,在该位置内,您可以使用它们通过原始请求中的“参数”将请求重写为您想要的任何内容。在这种情况下,您可以使用$ 1(组后面的数字)通过主机名指示后端服务器,使用$ 2来维护尾随部分。 $ http_host是对“Host:”HTTP标头的标准nginx引用。如果你有“静态”后端,你可以在proxy_pass中省略除$ 2之外的所有内容。