我收到许多来自同一个 IP 的请求,这些请求的 HTTP 标头中提供了 Basic Auth 格式的凭据。即使来源相同,请求中的凭据也经常不同。
这是一个从内存缓存中获益良多的 API。但是,要使此缓存正常工作,我需要能够将具有特定凭据集的请求路由到同一台机器。
这意味着我需要想出一个路由解决方案,以某种方式将特定凭证“粘贴”到单台机器上一段时间 - 比如 30 分钟 - 但也要以循环方式分发尚未附加的凭证。
使用 HAProxy 可以实现这个吗?
答案1
是的,HAProxy 可以平衡浏览器发送的任何请求标头。手册:
hdr(name) The HTTP header <name> will be looked up in each HTTP request.
Just as with the equivalent ACL 'hdr()' function, the header
name in parenthesis is not case sensitive. If the header is
absent or if it does not contain any value, the round-robin
algorithm is applied instead.
如果使用基本身份验证,则每个请求都将使用Authorization
标头进行身份验证,其形式为Authorization: Basic <base64(username+password)>
。因此,在您的 HAProxy 配置中,以下内容应该有效:
...
balance roundrobin
balance hdr(Authorization)
...