我需要根据所请求的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台服务器:
为此,我提出了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。第二种方法与第一种方法(实际可行)有何不同?