基于API版本的HAProxy路由

我正在设置HAProxy,我需要根据API版本进行路由。 问题是V2没有在v1中embedded路由器的前缀。 这是一个例子。

v1 app route = server / v1 / path v2 app route = server / path

我需要configurationHA,以便将server / v2 / path路由到/ server / path,同时返回200而不是302状态码。 我不想让api用户知道任何不同于/ server / v2 / path的东西

这是我的configuration,一切默认为v2。

frontend api bind *:80 stats uri /ls acl url_v1 path_beg /v1 use_backend api_v1 if url_v1 default_backend api_v2 backend api_v2 balance roundrobin server v1 ip:80 check backend api_v1 server v1 ip:80 check 

假设HAProxy 1.6或更高版本,这应该工作:

 backend api_v2 balance roundrobin server v1 ip:80 check http-request set-path %[path,regsub(^/api/v2,/api)] 

这会在将请求发送到服务器之前重写path。 它不redirect,并且HAProxy日志仍将显示客户端请求的实际path。