Zuul 路由前缀

zuul路由前缀如何拼接到真正的转发请求?
zuul:
routes:
account:
path: /account/**
serviceId: accountcenter-api
accountcenter-api.ribbon.listOfServers: http://127.0.0.1:8989/accountcenter-api/,http://api.dev.wmeng.com/accountcenter-api/
ribbon.eureka.enabled: false

发起请求:http://localhost:10003/account/v1/auth/check
后台转发:http://api.dev.wmeng.com/v1/auth/check

期望:http://api.dev.wmeng.com/accountcenter-api/v1/auth/check
如何配置
 
2.png
已邀请:

程序猿DD - http://blog.didispace.com

赞同来自: xiaobaxi

这个配置用的少,不过可以面向服务路由的话,也可以理解成accountcenter-api这个是一个context-path吧?
 
虽然我之前做过为zuul增加域名路由和自动添加增加context-path的扩展,但是不太建议这样子去做。这些扩展都是为了兼容很多老的乱78糟的规则做的。你这个是不是也是因为前端发起的请求已经在运行了,不能改,所以要适配?如果是这样的话,我建议对于accountcenter-api这个前缀在nginx中补充。比如:
 
发起请求到nginx:http://localhost:10003/account/v1/auth/check 
nginx到zuul:http://localhost:10003/account/accountcenter-api/v1/auth/check
zuul到服务:http://api.dev.wmeng.com/accountcenter-api/v1/auth/check

fendougg

赞同来自:

试试加strip-prefix

zuul:
  routes:
    account:
      path=/accountcenter-api/**
      strip-prefix=false

wmeng

赞同来自:

com.netflix.loadbalancer.Server 直接舍弃第一个/之后的内容了
static Pair<String, Integer> getHostPort(String id) {
if (id != null) {
String host = null;
int port = 80;

if (id.toLowerCase().startsWith("http://";)) {
id = id.substring(7);
} else if (id.toLowerCase().startsWith("https://";)) {
id = id.substring(8);
}

if (id.contains("/")) {
int slash_idx = id.indexOf("/");
id = id.substring(0, slash_idx);
}

int colon_idx = id.indexOf(':');

if (colon_idx == -1) {
host = id; // default
port = 80;
} else {
host = id.substring(0, colon_idx);
try {
port = Integer.parseInt(id.substring(colon_idx + 1));
} catch (NumberFormatException e) {
throw e;
}
}
return new Pair<String, Integer>(host, port);
} else {
return null;
}

}

 

要回复问题请先登录注册