我正在设置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。