我正在设置 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 日志仍将显示客户端请求的实际路径。