【发布时间】:2016-06-21 01:37:08
【问题描述】:
HAProxy 是否支持基于路径的路由的域名到后端映射。
目前它确实支持 vhost 的地图:
frontend xyz
<other_lines>
use_backend backend1 if { hdr(Host) -i myapp.domain1.com }
use_backend backend2 if { hdr(Host) -i myapp.domain2.com }
可以使用地图重写为:
frontend xyz
<other_lines>
use_backend %[req.hdr(host),lower,map_dom(/path/to/map,default)]
地图文件内容为:
#domainname backendname
myapp.domain1.com backend1
myapp.domain2.com backend2
但如果路由是基于如下示例所示的路径:
frontend xyz
acl host_server_myapp hdr(host) -i myapp.domain.com
acl path_path1 path_beg /path1
acl path_path2 path_beg /path2
use_backend backend1 if host_server_myapp path_path1
use_backend backend2 if host_server_myapp path_path2
是否可以为这个用例进行映射?使用base 代替 hdr(host) 可能会给出整个路径,但它不会具有域的灵活性,因为base 是字符串比较。有没有其他方法可以将其转换为 haproxy 地图。
【问题讨论】:
-
文档中有一个
map_beg()转换器。它没有真正解释,但似乎你可以将它与第 7 层pathfetch 一起使用,用于类似于use_backend %[path,map_beg(...的内容 -
但这不会包含域名,path 只会给出请求的路径部分。
-
啊,我看到您在路径上进行匹配,忽略了您正在测试两个 ACL,一个用于路径,一个用于主机。可能还有一个解决方案,我会更详细地研究它,看看是否可以轻松完成。
标签: haproxy