基于 API 版本的 HAProxy 路由

基于 API 版本的 HAProxy 路由

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

v1 应用程序路由 = 服务器/v1/路径 v2 应用程序路由 = 服务器/路径

我需要配置 HA,以便它将 server/v2/path 路由到 /server/path,同时返回 200 而不是 302 状态代码。我不希望 api 用户知道除 /server/v2/path 之外的任何内容

这是我的配置,一切默认为 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

答案1

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

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

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

相关内容