我试图基于部分/ path正则表达式匹配,将HAProxy用作后端主机的动态代理。用例是从HTTPS前端路由到频繁出现的大量节点,而没有维护/ path到服务器主机名的显式映射。
特别是在这种情况下,节点是Amazon EMR集群的成员,我想反向代理/重写HTTP请求,例如:
<haproxy>/emr/ip-99-88-77-66:4040 -> 99.88.77.66:4040
<haproxy>/emr/ip-55-44-33-22/ganglia -> 55.44.33.22/ganglia
<haproxy>/emr/ip-11-11-11-11:8088/cluster/nodes -> 11.11.11.11:8088/cluster/nodes
...etc
动态地。
按原样,解析从/ emr开始的路径并将代理请求代理到正则表达式捕获的IP:
emr\/ip-(\d{1,3}-\d{1,3}-\d{1,3}-\d{1,3})(.*)
使用HAProxy可以吗?我知道这可能不是适合该工作的工具,但如果可能(甚至是性能不佳),我想使用我们已经拥有的工具。
tl; dr 基本上是nginx proxy_pass
,但具有HAProxy并从网址中提取了后端IP。
谢谢!
答案 0 :(得分:0)
是的,可以在haproxy中使用url过滤器,有关更多详细信息,请参见下面的链接。 https://fossies.org/linux/haproxy/doc/internals/filters.txt
答案 1 :(得分:0)
是的,可以这样做。我建议您使用ACL以及Roundrobin&check,这将允许您在通过检查路由到该实例之前检查该实例是否启动。这样,系统将仅路由到已启动并正在运行的服务实例,并且仅在它们启动后才预加载它们以供使用。
此外,这还将使您能够不断循环进入和退出实例,例如,如果您的AWS实例成本与您可能拥有的任何其他提供程序发生了变化,并且可以平衡负载并考虑最大程度地节省成本。
答案 2 :(得分:0)
是的,这是可能的。.查看官方手册: