配置 HA 代理以允许某些请求特定的应用服务器

配置 HA 代理以允许某些请求特定的应用服务器

我使用 HaProxy 进行了设置,其中每个 haproxy 服务器将流量路由到多个应用服务器。正常 http 流量的路由基于请求 url 的哈希值。

现在我想创建一些规则,允许某些管理请求路由到特定的应用服务器。也就是说,我有应用服务器“node06 - node15”。我希望能够请求 node06.mydomain.com/my-admin-request,并将其路由到正确的应用服务器。

我无法通过 dns 执行此操作。所有请求都通过单个公开的 IP 地址进入集群。

因此我制作了一个 haproxy 配置来执行我想要的操作:

frontend www-http
       bind :80
       reqadd X-Forwarded-Proto:\ http

       acl node06 hdr_beg(host) -i node06.
       use_backend node06-status if node06

       acl node07 hdr_beg(host) -i node07.
       use_backend node07-status if node07

       # ... and many more such nodes ...

       default_backend application-backend


       # This is the application back end. 
       # Route request based on hash of url
backend application-backend
       balance url_param url check_post

       server node06 192.168.1.70:80 check
       server node07 192.168.1.71:80 check

       # ... and many more such nodes ...

       # these are the status back ends. This is so we can make requests
       # direct to each node for the status console.
backend node06-status
       server node06 192.168.1.70:80

backend node07-status
       server node07 192.168.1.71:80

       # ... and many more such back ends ...

我觉得这个方法可行,但确实很冗长。我必须为集群中的每个应用服务器创建三次相同的配置块。如果我将其扩展到超过 10 个节点,它将变得难以管理。

有没有办法进行配置,以便我不需要为每个应用程序服务器单独配置行?

答案1

您可以将 ACL 和 use-server(而不是 use-backend)放在后端定义中。另外,我认为您可能能够使用内联 ACL,而不必在使用前定义它们。

相关内容