尝试了一下haproxy基于域名进行负载配置,配置起来也很简单。我这里的尝试是先将nginx下三个域名绑定给三个端口81,82,83,haproxy启动绑定80端口。然后请求时haproxy根据域名将请求分别分发给81,82,83三个nginx+php服务。haproxy主要的配置如下:本文地址:http://www.04007.cn/article/409.html,未经许可,不得转载.
frontend www bind *:80 #haproxy绑定80端口 mode http #使用http acl domain_shouji hdr_beg(host) -i shouji.com #-i指定匹配域名,如果匹配则分发给后端domain_shouji acl domain_kermit1 hdr_beg(host) -i kermit1.com #同上 acl domain_kermit2 hdr_beg(host) -i kermit2.com use_backend shouji if domain_shouji #设置每个后端使用哪个服务器集群 use_backend kermit1 if domain_kermit1 use_backend kermit2 if domain_kermit2 backend shouji #后端服务器集群配置 mode http balance roundrobin #后端负载均衡策略 server web01 192.168.90.123:81 check inter 2000 fall 3 #后端服务器列表 backend kermit1 mode http balance roundrobin server web01 192.168.90.123:82 check inter 2000 fall 3 backend kermit2 mode http balance roundrobin server web01 192.168.90.123:83 check inter 2000 fall 3上面配置中hdr_beg是haproxy对字符匹配的方法,同类的方法还有以下几个:本文地址:http://www.04007.cn/article/409.html,未经许可,不得转载.
path_beg <string> 用于测试请求的URI是否以<string>指定的模式开头。
acl url_static path_beg -i /static /images /javascript /stylesheets
#测试URL是个以/static /images /javascript /stylesheets开头
path_end <string> 用于测试请求的URL是否以<string>指定的模式结尾
acl url_static path_end -i .jpg .gif .png .css .js
#测试URI是否以.jpg .gif .png .css .js结尾
hdr_beg <string> 用于测试请求报文的指定首部的开头部分是否符合<string>指定的模式
acl host_static hdr_beg(host) -i img. video. download. ftp.
#用于测试请求报文首部中的主机是否以img. video. download. ftp.开头
acl monitor hdr_beg(host) -i monitor.test.com
#定义ACL名称,对应的请求的主机头是monitor.test.com 本文地址:http://www.04007.cn/article/409.html,未经许可,不得转载.
配置结束后,当在前端请求kermt1.com和kermit2.com时,haproxy会分发给82,83两个端口,此时在输出内容上做些区别就很容易进行验证。本文地址:http://www.04007.cn/article/409.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/409.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |