使用HAProxy根据域路径进行路由

时间:2019-07-12 07:59:06

标签: nginx load-balancing haproxy

我需要根据所请求的URI负载均衡请求。例如:

当前,无论路径/ URI如何,所有请求都发送到web-server1-3。这是在所有3个haproxy主机中设置的方式:

frontend fe
    default_backend web-servers
backend web-servers
    balance leastconn
    server web-server-1 1.1.1.1:80 check weight 1
    server web-server-2 1.1.1.2:80 check weight 1
    server web-server-3 1.1.1.3:80 check weight 1

Web和api服务均与JBoss在同一主机(即,web-server-1至3)中运行。最近,我决定拆分Web服务和api服务,以便可以根据URI进行负载均衡,就像我在一开始提到的那样。 所以,现在我总共有6台服务器:

  • web-server-1至3(1.1.1.1-3:80)
  • api-server-1至3(1.1.1.4-6:8088)

为此,我提出了2种不同的选择:

1)添加3个Nginx主机。 haproxy配置如下所示:

backend nginx-servers
    balance leastconn
    server nginx-1 1.1.1.7:80 check weight 1
    server nginx-2 1.1.1.8:80 check weight 1
    server nginx-3 1.1.1.9:80 check weight 1

现在每个nginx主机都基于URI进行路由,例如:

upstream web-servers {
    server 1.1.1.1:80;
    server 1.1.1.2:80;
    server 1.1.1.3:80;
}
upstream api-servers {
    server 1.1.1.4:8088;
    server 1.1.1.5:8088;
    server 1.1.1.6:8088;
}
server {
    location ~ "/" {
        proxy_pass http://web-servers;
        proxy_set_header Host $host;
    }
    location ~ "/api" {
        proxy_pass http://api-servers;
    }
}

2)仅使用haproxy的替代方法是:

frontend fe
    acl website_domain req.hdr(host) -i website.com
    acl route_api path -i -m beg /api
    use_backend api-servers if route_api
    use_backend web-servers if website_domain !route_api
backend web-servers
    balance leastconn
    server web-server-1 1.1.1.1:80 check weight 1
    server web-server-2 1.1.1.2:80 check weight 1
    server web-server-3 1.1.1.3:80 check weight 1
backend api-servers
    balance leastconn
    server api-server-1 1.1.1.4:8088 check weight 1
    server api-server-2 1.1.1.5:8088 check weight 1
    server api-server-3 1.1.1.6:8088 check weight 1

但是,使用第二个选项,当我访问http://website.com/时,我所有的api请求都返回http / 404。第二种方法与第一种方法(实际可行)有何不同?

0 个答案:

没有答案