nginx如何才能修改proxy_pass请求的uri

<img src="/abc/ooo/1.jpg" />
    location ~ .*/abc/.*\.jpg$ {
        proxy_pass https://s1.xxx.com;
    }

当我图片链接是这样时会代理到s1.xxx.com
最终请求的是 https://s1.xxx.com/abc/ooo/1.jpg
访问成功

但是我现在有两个子域名 s1.xxx.com s2.xxx.com 我想在通过这样的请求来区分可是不行

<img src="/s1/abc/ooo/1.jpg" />
<img src="/s2/abc/ooo/1.jpg" />
    location ~ .*/abc/.*\.jpg$ {
        set $sub s1;
        if ($uri ~ .*/(s1|s2)/abc/.*\.jpg){
            set $sub $1;
        }
        proxy_pass https://$sub.xxx.com;
    }

子域名能够修改成功但是最终请求的是
https://s1.xxx.com/s1/abc/ooo...
https://s2.xxx.com/s2/abc/ooo...
访问失败

应该如何编写配置文件 才能做到 把 /s1/ /s2/ 这样的路径删除
我试过rewrite 然后在proxy_pass没有成功,望指教。

解决办法看采纳和其评论

阅读 4k
2 个回答

直接提取 uri 然后拼接就好

location ~ .*/abc/.*\.jpg$ {
    set $sub s1;
    if ($uri ~ .*/(s1|s2)(/abc/.*\.jpg)){
        set $sub $1;
        set $jpg_uri $2;
    }

    proxy_set_header Host $sub.xxx.com;
    proxy_set_header X-Forwarded-For $remote_addr;

    proxy_pass https://$sub.xxx.com$jpg_uri;
}

加个这个试试看行不行

set $t_uri $uri;
if ($t_uri ~ /abc/.*\.jpg){
    set $t_uri $1;
}
proxy_pass https://$sub.xxx.com/$t_uri;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题