是否可以设置一个动态变量来保存HTTP头的内容,例如Host / X-Forwarded-Host,并在后续的ACLs中使用?
frontend web1
# ...
set-var s1(Host)
acl site1 hdr_end(host) -i %[s1]
# ...
use_backend %[s1] if site1
frontend web1
# ...
acl site1 hdr(host) -i example.com
acl site2 hdr(host) -i example.net
# ...
use_backend com if site1
use_backend net if site2
你是只想做这件事情,还是试图完成更复杂的任务?
更新:以下是如何根据 Host 标头选择后端的方法:
frontend web1
# ..
http-request set-var(req.s1) req.hdr(Host),field(1,:),lower,regsub(\.,_,g)
use_backend %[var(req.s1)]
backend example_com
# ..
backend example_net
# ..
这将设置一个变量,在请求的上下文中有效,使用Host头转为小写并将句点替换为下划线的值。实际上,您甚至不需要一个变量:
frontend web1
# ..
use_backend %[req.hdr(Host),field(1,:),lower,regsub(\.,_,g)]
如果找不到与主机头匹配的后端,则HAproxy将返回503。如果您希望这样的请求去其他地方,可以设置default_backend
(我测试过,在1.6.3中有效,至少如此)。
use_backend
的第一个参数插值。我会试着玩一下... - mwp