大家帮忙看下, 这个 nginx 的 rewrite 规则的正确写法是什么, 关于反向代理的

location ~* "(?<begin>rplocal|rposs)/([a-z0-9]{3})/([a-z0-9]{8})/(.*)$" {
    rewrite "(?<begin>rplocal|rposs)/([a-z0-9]{3})/([a-z0-9]{8})/(.*)$" /$2/$3/$4 break;
    if ($begin = 'rplocal') {
        set $proxy http://127.0.0.1:9222;
    }
    if ($begin = 'rposs') {
        set $proxy https://url-domain.com;
    }
    proxy_pass $proxy;
}

目的是通过 url 反向到不同的地址

这里补充一个可以通过的方案, 但是此方案还有冗余 rewrite, 是使用 openresty + echo 调试出来的

location ~* "(rplocal|rposs)/([a-z0-9]{3})/([a-z0-9]{8})/(.*)$" {
    set $type $1;
    if ($type = "rplocal") {
        rewrite "^/([a-z\-]*)/(\w{3})(\w{5})/(.*)$" /$2/$3/$4 break;
        proxy_pass http://127.0.0.1:9222;
    }
    if ($type = "rposs") {
        rewrite "^/([a-z\-]*)/(\w{3})(\w{5})/(.*)$" /$2/$3/$4 break;
        proxy_pass https://url-domain.com;
    }
}
阅读 1.7k
1 个回答

这种情况,我都拆成两个 location 来写

location ~ /rplocal/ {
    proxy_pass http://127.0.0.1:9222;
}
location ~ /rposs/ {
    proxy_pass https://url-domain.com;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏