HAProxy-路由到基于URL /路径的后端IP?

时间:2019-01-31 22:47:27

标签: amazon-ec2 dns url-routing haproxy

我试图基于部分/ 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。

谢谢!

3 个答案:

答案 0 :(得分:0)

是的,可以在haproxy中使用url过滤器,有关更多详细信息,请参见下面的链接。 https://fossies.org/linux/haproxy/doc/internals/filters.txt

答案 1 :(得分:0)

是的,可以这样做。我建议您使用ACL以及Roundrobin&check,这将允许您在通过检查路由到该实例之前检查该实例是否启动。这样,系统将仅路由到已启动并正在运行的服务实例,并且仅在它们启动后才预加载它们以供使用。

此外,这还将使您能够不断循环进入和退出实例,例如,如果您的AWS实例成本与您可能拥有的任何其他提供程序发生了变化,并且可以平衡负载并考虑最大程度地节省成本。

答案 2 :(得分:0)

是的,这是可能的。.查看官方手册:

Using ACLs and fetching samples