我使用 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,而不必在使用前定义它们。