基于合法授权用户的后端路由

问题描述 投票:0回答:1

我是haproxy的新手,但已经非常喜欢它。我马上有一个特殊的用例,但是找不到合适的方法。

问题:是否可以基于当前经过身份验证的用户路由到后端服务器?

类似...

userlist EXAMPLEORG
 user bob password bob123
 user alice password alice987

frontend https
 bind *:443
 mode tcp
 ...
 use_backend a-servers if { CURRENT_USER bob }
 use_backend b-servers if { CURRENT_USER alice }

但是(伪代码)CURRENT_USER的正确FETCH语法是什么?

背景(=这些是我必须使用的约束):-有几个上游HTTP代理(鱿鱼)-有几个用户(〜50)-每个用户都分配有一个代理(即“ Joe Doe”必须使用“ upstream-squid-5”)-但是分配可以随时更改,并且-无法更改本地代理配置(Windows通过组策略,Windows通过配置文件)(足够快)

(以上这些要点不在我的掌控之中,我们无需讨论;))

第一次尝试是通过代理自动配置文件(PAC),该文件可以在服务器上更改,并由客户端自动轮询。 (因此每个用户只需部署pac文件一次)但是:在某些设备上更新时间过长,因此由于不可靠而被丢弃

我的研究使我进入了HAPROXY。我的想法是使用内置的地图功能来路由到正确的后端。但是我找不到合适的提取源来区分请求来源。我知道可以设置用户列表/身份验证。

正如我所说,我是新手,找不到基于用户的路由的任何东西。

高度赞赏任何帮助或指出正确的方向。

此外,如果您知道一个更好的解决方案,我将非常感谢。

谢谢!

haproxy
1个回答
0
投票

我认为将相同后端的用户放入一个组,然后为他们编写ACL更容易。

我创建了3个示例用户组,名称可选,然后将用户分配给该组。容易吧?在前端,我们必须首先检查所有用户是否为有效(身份验证)用户。然后,我们为每个用户组创建每个ACL,然后将其路由到正确的后端。

未经测试,但我敢肯定它可以使用HAProxy的地图功能进行清理。

userlist user
  group ube_1
  group ube_2
  group ube_3

  user bob password ... groups ube_1
  user alice password ... groups ube_2

frontend
  ...
  acl is_authed_user http_auth_group(user)
  http-request auth realm httpauth unless is_authed_user

  acl is_be_1 http_auth_group(user) ube_1
  acl is_be_2 http_auth_group(user) ube_2

  use-backend be_1 if is_be_1
  use-backend be_2 if is_be_2
© www.soinside.com 2019 - 2024. All rights reserved.