Nginx dynamically forwards to the implementation of upstream based on path in url

  • 2020-05-24 06:52:48
  • OfStack

In Nginx, there are some advanced scenarios that need to be dynamically forwarded to the disabled upstream based on the path parameter in url

Scenario 1

/ svr1 xxxx & # 63; yyy forward to svr1:8080 /xxxx? yyy

/ svr2 xxxx & # 63; yyy forward to svr2:8080 /xxxx? yyy

The configuration is as follows:


location ~* /(srv[1-9]+)/(.*)$ {
  allow all;
  proxy_pass http://$1/$2$is_args$args; 
  proxy_set_header Host $host;                         
  proxy_set_header x-forwarded-for $forwarded_addr;                                
}

upstream srv1 {                                                   
   server srv1-ip:8080;
}
      
upstream srv2 {                                                   
   server srv2-ip:8080;
}

Scenario 2

There are 3 peer services under svc1, srv1,2,3, /svc1/xxxx? yyy to srv1/2/3:8 080/xxxx? yyy

svc2 has 3 peer services srv4,5,6, /svc2/xxxx? yyy to, svr4/5/6:8080 /xxxx? yyy


location ~* /(svc[1-9]+)/(.*)$ {                             
  allow all;                                  
  proxy_pass http://$1/$1/$2$is_args$args;                   
  proxy_set_header Host $host;
  proxy_set_header x-forwarded-for $forwarded_addr;                   
}

upstream svc1 {
  server srv1:8080;   
  server srv2:8080;   
  server srv3:8080;                
}

upstream svc2 {
  server srv3:8080;   
  server srv4:8080;   
  server srv5:8080;                
}


Related articles: