基于标题值的HAProxydynamic服务器地址

你好我试图路由stream量回到用户机器为了在本地运行一个站点,但拿起HAProxy提供的其他来源的标头/ cookies /路由逻辑。 到目前为止,我还没有弄清楚如何做到这一点。 该文档说使用环境variables是可用的https://cbonte.github.io/haproxy-dconv/configuration-1.5.html#4-server

地址string的任何部分都可以引用任意数量的环境variables,方法是使用美元符号('$')在名称前加上括号('{}'),类似于Bourne shell中所做的。

但我会想象有一种使用acl或样本获取的方式,但对于我来说,我无法弄清楚如何去做。 下面是我尝试过的一个例子。 我通过删除$ {hdr(originalIp)}并使用我的IP做了一个概念validation,但是我希望它能dynamic地使用请求者IP(如果存在的话)

### Sample config acl has_local_cookie cook_sub(local) -i true use_backend local if has_local_cookie backend local server local-origin ${hdr(originalIp)}:443 ssl verify none 

你正在尝试的问题是,它将整个configuration视为不断地在运行时进行parsing和解释,而这当然不是这种情况。

各种指令的某些参数是静态的,其他的是dynamic的,但是server声明绝对是静态的。 服务器恰好代表一个目标地址,而不是每个请求的不同地址。

您将需要为每个开发人员configuration一个后端,或者您可以将它们全部放在一个后端, backend local用一个服务器声明为每个开发人员, server dev-1 192.168.1.1:80 ...server dev-2 ...

然后use_backend local if { cook_sub(local) -i true }

然后在后端添加一个use-server以将服务器名称匹配到源IP use-server dev-1 if { src 192.168.1.1 }每个开发人员use-server dev-1 if { src 192.168.1.1 }

请注意, { ... }是一个匿名ACL,它是一种testing简单条件的非常简洁(imho)的方式,特别是当条件仅在configuration中的一个位置进行评估时。 如果您在多个位置testing相同的条件,那么命名ACL更好,因为它们只能在一个位置进行编辑,因此您不必在多个位置更新它们,就像在复制 – 粘贴相同的匿名ACL时一样configuration。