配置 HAProxy 时,我想根据 cookie 的存在将流量发送到某些服务器。
例如:
- 有一个 HAProxy 服务器和 2 个 Web 服务器(serverA 和 serverB)。
- 当有人登录时,会创建一个 cookie“loginCreds=user:company”。
- 当来自 CompanyA 的 John 进入时,他的 cookie 是“loginCreds=John:CompanyA”。
- 然后他的流量将被定向到服务器A。
这可能吗?如果可以,如何设置?
答案1
是的,这是可能的,但您需要自己调整/测试此配置。它应该看起来像这样:
笔记:这仅检查“Cookie:”标头是否设置为“CompanyA”或“CompanyB”(区分大小写)。您可以尝试不同的值,如果您擅长使用正则表达式,则可以改用 hdr_reg(Cookie)。
frontend read_cookies
bind :80
mode http
acl is_companya hdr(Cookie) CompanyA
acl is_companyb hdr(Cookie) CompanyB
use_backend company_a if is_companya
use_backend company_b if is_companyb
default_backend company_c
backend company_a
mode http
option forwardfor
balance source
option httpclose
option httpchk
server web1 172.16.0.11:80 check
backend company_b
mode http
option forwardfor
balance source
option httpclose
option httpchk
server web2 172.16.0.12:80 check
backend company_c
mode http
option forwardfor
balance source
option httpclose
option httpchk
server web3 172.16.0.13:80 check
答案2
嗯,这是一个不典型的请求。我认为你可以用 HAProxy 中的“appsession”命令,但我不知道它的确切算法。我猜你必须在 HAProxy 列表上询问,或者查看 HAProxy 源代码。
难道你不能区别对待比 cookie 更“丰富”的东西吗?例如,创建主机名“premium.company.com”和“standard.company.com”,并根据主机名路由流量。
另一个想法可能是了解 HAProxy 自己的粘性会话 cookie 的格式(请参阅文档中的“cookie”部分)。如果您设置一个与 HAProxy 自身使用的名称和内部数据完全相同的 cookie,那么我猜 HAProxy 将按照您希望的方式路由传入的请求...