HAProxy7层模型下强大的ACL规则用法

来源:互联网 发布:以太网数据帧格式 mii 编辑:程序博客网 时间:2024/06/10 14:49

关于HAProxy的简单负载大家都有所了解,本次文章给大家介绍一些基于7层负载的acl控制方法

同理,贴出全文配置

## demo config for Proxy mode# global        maxconn         20000#设定HAProxy进程可接受的最大并发数ulimit-n41000#linux命令行选项,等同于上参数        log             127.0.0.1 local0#全局的日志中配置,local0 是日志设备 info(err,warnig,minfo,debug)为日志级别,使用rsyslog        uid             200        gid             200#用户和组 ,可以用uid,gid代替        chroot          /var/emptynbproc1#HAProxy启动时可创建的进程数,配合daemon参数使用,默认只启动一个进程,该值应小于cpu核数。        daemon#进程后台运行,(推荐模式)defaultsmodehttpretries3timeoutconnect10stimeoutclient20stimeoutserver30stimeoutcheck5slistenadmin_statsbind*:9188modehttplogglobalstatsrefresh 30sstatsuri /haproxy-statusstatsrealm welcome login\ Haproxystatsauthadmin:admin~!@statshide-versionstatsadmin if TRUEfrontend test-proxybind*:80        mode            http        log             global        option          httplogoptionforwardforoptionhttpclose#HAProxy在完成一次请教请求连接后,将主动关闭该连接,对性能非常有帮助        option          dontlognull        option          nolinger        option          http_proxy        maxconn         8000        timeout client  30s# layer3: Valid users#acl allow_host src 192.168.200.150/32acl allow_host src 192.168.10.0/24#acl allow_host src 0.0.0.0/24http-request deny if !allow_host# layer7: prevent private network relaying#acl forbidden_dst url_ip 192.168.0.0/24#acl forbidden_dst url_ip 172.16.0.0/12acl forbidden_dst url_ip 192.168.20.0/24http-request deny if forbidden_dstacl host_a hdr_reg(host) -i www.a.cnacl host_b hdr_dom(host) -i www.b.cnacl url_policyurl_sub-i buy_siduse_backendtest-proxy-srv-aifhost_ause_backendtest-proxy-srv-bifhost_buse_backendtest-proxy-srv-cifurl_policydefault_backend test-proxy-srv-defaultbackendtest-proxy-srv-defaultmodehttpretries2optionredispatchoptionabortoncloseoptionnolingeroptionhttp_proxy#optionhttpchk GET /index.phpbalanceroundrobincookieSERVERIDserver web0192.168.10.101:8999cookieserver0weight 4check inter 2000 rise 2 fall 3backend test-proxy-srv-amode            httptimeout connect 5stimeout server  5sretries         2optionredispatch#应用于cookie保持的环境optionabortonclose#自动结束长时间连接option          nolingeroption          http_proxy#optionhttpchkGET /index.phpbalanceroundrobincookieSERVERIDserver web1192.168.10.101:8080cookieserver1 weight 6 check inter 2000 rise 2 fall 3server web2192.168.10.101:8888cookieserver2weight 6 check inter 2000 rise 2 fall 3backendtest-proxy-srv-bmodehttpretries2optionredispatchoptionabortoncloseoptionnolingeroptionhttp_proxy#optionhttpchk GET /index.phpbalanceroundrobincookieSERVERIDserver web3192.168.10.182:8080cookieserver3weight 8 check inter 2000 rise 2 fall 3backendtest-proxy-srv-cmodehttpretries2optionredispatchoptionabortoncloseoptionnolingeroptionhttp_proxy#optionhttpchk GET /index.phpbalanceroundrobincookieSERVERIDserver web4192.168.10.182:8888cookieserver4weight 6 check inter 2000 rise 2 fall 3# layer7: Only GET method is validacl valid_method        method GETacl valid_methodmethod POSThttp-request deny if !valid_method# layer7: protect bad replyhttp-response deny if { res.hdr(content-type) audio/mp3 }

那本配置文件的acl控制主要是在frontend里设置

acl host_a hdr_reg(host) -i ^(www.a.cn|a.cn)
acl host_b hdr_dom(host) -i www.b.cn
acl url_policyurl_sub -i buy_sid


use_backend test-proxy-srv-a ifhost_a
use_backend test-proxy-srv-b ifhost_b
use_backend test-proxy-srv-c ifurl_policy
default_backend test-proxy-srv-default

第一个acl控制,当主机为www.a.cn或者a.cn时,规则返回TRUE,对应第一个use_backend 请求访问后端服务器池test-proxy-srv-a

第二个acl控制,当主机为www.b.cn时,规则返回TRUE,对应第二个use_backend请求访问后端服务器池test-proxy-srv-b

第三个acl控制,当请求url路径出现buy_sid 字符串时,规则返回TRUE,对应第三个use_backend请求访问后端服务器池test-proxy-srv-c

当所有规则均不为TRUE时,请求访问默认后端服务器池test-proxy-srv-default

当然acl还有更多的用法,如下

acl url_staticpath_end .gif .png .jpg .css .js

acl host_wwwhdr_beg(host) -i www

acl host_statichdr_beg(host) -iimg. video. download. ftp.


use_backendstatic ifhost_static || host_www url_static

use_backendwww if host_www

default_backendserver_cache

第一个acl,通过path_end参数定义请求的url以.gif,.png,.jpg,.css,.js结尾时返回TRUE

第二个acl,通过hdr_beg(host)参数定义如果客户端以www开头的域名发送请求时返回TRUE

第三个acl,也是通过hdr_beg(host)参数定义以img.,video.,download.,ftp.开头域名发送请求返回TRUE

第四行backend,定义了当请求需同时满足host_static与url_static时,或者满足host_www与url_static时请求将发往名为static 的backend

第五行backend,定义了当请求满足host_www规则时,请求发往名为www的backend

第六行backend,定义将用户请求默认调度到名为server-cache的backend


以上就是acl的常用控制用法,基本上可以满足日常负载需求。如果你有更多想法,欢迎留言

原创粉丝点击