是否可以设置一个动态变量来保存 HTTP 标头的内容(例如 Host/X-Forwarded-Host)并稍后在 ACL 中使用?
frontend web1
# ...
set-var s1(Host)
acl site1 hdr_end(host) -i %[s1]
# ...
use_backend %[s1] if site1
Run Code Online (Sandbox Code Playgroud)
这里有多种技术的组合。您根本不需要变量来根据主机地址设置 ACL 并使用这些 ACL 选择后端。那会很简单,比如:
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
Run Code Online (Sandbox Code Playgroud)
这就是您想要做的全部事情,还是您正在尝试完成一些更复杂的事情?
更新:以下是如何根据主机标头选择后端的方法:
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
# ..
Run Code Online (Sandbox Code Playgroud)
这将设置一个在请求上下文中有效的变量,使用小写的 Host 标头值并将句点替换为下划线。实际上,你甚至不需要变量:
frontend web1
# ..
use_backend %[req.hdr(Host),field(1,:),lower,regsub(\.,_,g)]
Run Code Online (Sandbox Code Playgroud)
如果找不到与 Host 标头匹配的后端,HAproxy 将返回 503。如果您希望此类请求发送到其他地方,您可以设置 a default_backend(我对此进行了测试,至少在 1.6.3 中有效)。
| 归档时间: |
|
| 查看次数: |
20225 次 |
| 最近记录: |