请问如何匹配以下路径的正则?

目标地址有如下列表:
http://1.1.1.1:8081/400000001...
http://1.1.1.1:8081/1/4000000...
http://1.1.1.1:8081/2/4000000...
http://1.1.1.1:8081/3/4000000...
http://1.1.1.1:8081/4/4000000...
其中1,2,3,4部分可能逐年增加,400000001部分是固定的,现在需要NGINX反向代理访问,请问下大佬们如何配置location的规则,假设nginx的内网ip为8.8.8.8,现在访问如下地址,希望能正确拿到资源
http://8.8.8.8/400000001/xxx/...
http://8.8.8.8/1/400000001/xx...
比较笨的配置方式

location /400000001{
    proxy_pass http://1.1.1.1:8081/400000001/
}
location /1/400000001{
    proxy_pass http://1.1.1.1:8081/1/400000001/
}
location /2/400000001{
    proxy_pass http://1.1.1.1:8081/2/400000001/
}
location /3/400000001{
    proxy_pass http://1.1.1.1:8081/3/400000001/
}
location /4/400000001{
    proxy_pass http://1.1.1.1:8081/4/400000001/
}
阅读 2k
2 个回答
location / {
    proxy_pass       http://1.1.1.1:8081;
    proxy_set_header Host      $host;
}

从你描述来看,并不需要设置多级反向代理,只需要对根设置反向代理即可啊,因为后面的子路径都是相对根稳定的啊!

之所以感觉你问题指向性不强,就是有这个原因的。

和题主来回沟通,觉得可能下面才是他期望的:

location ~ ^(?:/\d+)?/400000001/ {
    proxy_pass       http://1.1.1.1:8081/400000001/;
    proxy_set_header Host      $host;
}

上面的处理与另外一名朋友IanSun提到的:

location ~ ^(?:/\d+)?/400000001 {
    proxy_pass       http://1.1.1.1:8081;
    proxy_set_header Host      $host;
}

差别有2点:

  1. 对于 http://8.8.8.8/1/400000001/xxx/... IanSun的方案会代理访问http://1.1.1.1:8081/1/400000001/xxx/... ,而我的方案是访问http://1.1.1.1:8081/400000001/xxx/...
  2. 对于http://8.8.8.8/1/400000001xxx/...IanSun的方案会代理访问http://1.1.1.1:8081/1/400000001xxx/...,而我的方案这里不会被代理
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题