haproxy之ACL规则

haproxy支持ACL规则

,用于定义三层到七层的规则来匹配一些特殊的请求,实现基于请求报文首部、相应报文内容或者是一些其他状态信息,从而根据需求进行不同的策略转发响应。

可以通过ACL规则完成以下两种主要功能:
1、通过设置ACL规则来检查客户端请求是否符合规则,将不符合规则要求的请求直接中断;
2、符合ACL规则的请求由backend指定的后端服务器池执行基于ACL规则的负载均衡,不符合的可以直接中断响应,也可以交由其它服务器池执行。

Haproxy中的ACL汇总设置在frontend部分

语法:
acl 名称 方法 -i [匹配的路径或文件]

说明:
acl:区分字符大小写,且其只能包含大小写字母、数字、-(连接线)、_(下划线)、.(点号)和:(冒号);haproxy中,acl可以重名,这可以把多个测试条件定义为一个共同的acl。

-i:忽略大小写
-f:从指定的文件中加载模式;

方法:用来设定实现ACL的方法。
常用的方法:
1、hdr_beg(host):用于测试请求报文的指定首部的开头部分是否符合指定的模式
例子:
acl host_static hdr_beg(host) -i img. video. download. ftp.
测试请求是否为提供静态内容的主机img、video、download或ftp。

2、hdr_end(host):用于测试请求报文的指定首部的结尾部分是否符合指定的模式
例子:
acl host_static hdr_beg(host) -i .aa.com .bb.com

3、hdr_reg(host):正则匹配
例子:
acl bbs hdr_reg(host) -i ^(bbs.test.com|shequ.test.com|forum)

4、url_sub:表示请求url中包含什么字符串
5、url_dir:表示请求url中存在哪些字符串作为部分地址路径

6、path_beg: 用于测试请求的URL是否以指定的模式开头
例子:
acl url_static path_beg -i /static /iilannis /javascript /stylesheets
用于测试URL是否以/static、/iilannis、/javascript或/stylesheets开头。

7、path_end:用于测试请求的URL是否以指定的模式结尾
例子:
acl url_static path_end -i .jpg .gif .png .css .js
测试URL是否以.jpg、.gif、.png、.css或.js结尾。

也可以根据访问的地址和端口进行规制设置:
dst:目标地址
dst_port:目标端口
src:源地址
src_port:源端口

实现的结果:
当客户端访问haproxy时,请求的是静态文件内容时,请求转交给static server,请求的是php内容时,请求转交给php server,请求的是jsp内容时,请求转交给tomcat server,以实现动静分离。

先部署三台web服务器:
一台httpd支持php
一台部署nginx支持静态资源
一台tomcat支持jsp

yum install -y
pcre-devel
bzip2-devel
gcc
gcc-c++
make

tar xzvf haproxy-1.5.15.tar.gz -C /opt

cd /opt/haproxy-1.5.15
make TARGET=linux26 PREFIX=/usr/local/haproxy //标识64为系统
make install PREFIX=/usr/local/haproxy

mkdir /etc/haproxy

useradd -s /sbin/nologin -M haproxy

cp /opt/haproxy-1.5.15/examples/haproxy.cfg /etc/haproxy/

vi /etc/haproxy/haproxy.cfg

#---------------------------------------------------------------------
Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local3
maxconn 204800
chroot /usr/local/haproxy
user haproxy
group haproxy
daemon
nbproc 1
pidfile /var/run/haproxy.pid
stats socket /usr/local/haproxy/stats
description haproxy server
#---------------------------------------------------------------------
#common defaults that all the ‘listen’ and ‘backend’ sections will
#use if not designated in their block
#---------------------------------------------------------------------
defaults
log global
mode http
maxconn 10000
option httplog
option httpclose
option dontlognull
option forwardfor except 127.0.0.0/8
retries 3
option redispatch
option abortonclose
balance roundrobin
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
#---------------------------------------------------------------------
#use listen setting the haproxy status for site
#---------------------------------------------------------------------
listen admin_status #设置haproxy监控状态
bind *:8089
mode http
log 127.0.0.1 local3 err
stats refresh 5s
stats uri /status #监控状态页面访问url
stats realm www.skeryp.com
stats auth admin:admin
stats hide-version
stats admin if TRUE
#---------------------------------------------------------------------
#main listen which proxys to the backends
#---------------------------------------------------------------------
listen www
bind *:80
maxconn 5000
mode http
log global
option httplog
option httpclose
option forwardfor
log global

    default_backend default   #设置默认访问页面
    #定义当请求的内容是静态内容时,将请求转交给static server的acl规则       
    acl url_static path_beg  -i /static /images /img /javascript /stylesheets
    acl url_static path_end  -i .jpg .gif .png .css .js .html 
    acl host_static hdr_beg(host)  -i img. video. download. ftp. imags. videos.
    #定义当请求的内容是php内容时,将请求转交给php server的acl规则    
    acl url_php path_end     -i .php
    #定义当请求的内容是.jsp或.do内容时,将请求转交给tomcat server的acl规则    
    acl url_jsp path_end     -i .jsp .do


    #引用acl匹配规则
    use_backend static_pool if  url_static or host_static
    use_backend php_pool    if  url_php
    use_backend tomcat_pool if  url_jsp

#定义后端backend server
backend static_pool
option httpchk GET /index.html
server static1 192.168.80.101:80 cookie id1 check inter 2000 rise 2 fall 3
backend php_pool
option httpchk GET /info.php
server php1 192.168.80.102:80 cookie id1 check inter 2000 rise 2 fall 3
backend tomcat_pool
option httpchk GET /index.jsp
server tomcat1 192.168.80.103:8086 cookie id2 check inter 2000 rise 2 fall 3

#<----------------------default site for listen and frontend------------------------------------>
backend default
mode http
option httpchk GET /index.html
server default 192.168.80.104:80 cookie id1 check inter 2000 rise 2 fall 3 maxconn 5000

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值