HAProxy的ACL用于实现基于请求报文首部、响应报文的内容或其他的环境状态信息来做出转发决策,这大大增强了其配置弹性,其配置法则通常分为两步,
首先去定义ACL,即定义一个测试条件,而后在条件得到满足时执行某特定的动作,如阻止请求或转发至某特定的后端。
1、定义ACL语法:
acl <aclname> <criterion> [flags] [operator] <value> ...
<aclname>:ACL名称,区分字符大小写,且只能包含大小写字母,数字,-(连接线),_(下划线),.(点号),和:(冒号);
haproxy中,acl可以重名,这可以把多个测试条件定义为一个共同的acl;
<criterion>:测试标准,即对什么信息发起测试,测试方式可以由[flags]指定的标志进行调整,而有些测试标准也可以需要为其在<value>指定指定一个操作符[operator]
[flags]:目前haproxy的acl支持的标志位有3个:
    -i:不区分<value>中模式字符的大小写;
    -f:从指定的文件中加载模式;
    --:标识符的强制结束标记,在模式中的字符串像标记符时使用;
<value>:acl测试条件支持的值有以下四类:
    整数或整数范围:如1024:65535表示从1024至65535,仅支持使用正整数(如果出现类似小数的标识,其为通常为测试版本),其支持使用的操作符有五个
        分别为:eq、ge、gt、le和lt;
    字符串:支持使用"-i"以忽略字符大小写,支持使用"\"进行转义,如果在模式首部出现了-i,可以在其之前使用"--"标志位;
    正则表达式:其机制类同字符串匹配
    IP地址及网络地址
同一个acl中可以指定多个测试条件,这些测试条件需要由逻辑操作符指定其关系,条件件的组合测试关系有三种:
    "与"(默认即为与操作)
    "或"(使用"||"操作符)
    "非"(使用"!"操作符)

2、常用的测试标准(criteria)
be_sess_rate(backend) <integer>
用于测试指定的backend上会话创建的速率(即每秒创建的会话数)
是否满足指定的条件:常用于在制定backend上的会话速率过高时将用户请求转发至另外的backend,用于组织攻击行为,例如:
backend dynamic
    mode http
    acl being_scanned be_sess_rate gt 50
    redirect location /error_pages/denied.html if being_scanned
fe_sess_rate <integer>
用于测试指定的frontend(或当前frontend)上的会话创建速率是否满足指定的条件:常用于为frontend指定一个合理的会话创建速录
上限以防止服务被滥用。例如下面的例子限定入站邮件速率不能大于50封/秒,所有在此指定范围之外的请求都将被延迟50毫秒。
frontend mail
    bind :25
    mode tcp
    maxconn 500
    acl too_fast fe_sess_rate ge 50
    tcp-request inspect-delay 50ms
    tcp-request content accept if ! too_fast
    tcp-request content accept if WAIT_END
hdr(header) <string>
用于测试请求报文中的所有首部或指定首部是否满足指定条件,指定首部时,其名称不区分大小写,且在括号"()"中不能有任何多余的
空白字符,测试服务器端的响应报文时可以使用shdr(),例如下面的例子用于测试首部Connection的值是否为close。
    hdr(Connection) -i close
method <string>
测试HTTP请求报文的方法
path_beg <string>
用于测试请求的URL是否以<string>指定的模式开头,下面的例子用于测试URL是否以/static、/images、/javascript或/stylesheets头
acl url_static    path_beg    -i    /static /images /javascript /stylesheets
path_end <string>
用于测试请求的URL是否以<string>指定的模式结尾,例如下面的例子测试URL是否以jpg、gif、png、css或js结尾
acl url_static    path_end    -i .jpg .gif .png .css .js
hdr_beg <string>
用于测试请求报文的指定首部的开头部分是否符合<string>
指定的模式。例如,下面的例子测试请求是否为提供静态内容的主机img、vides、download或ftp
acl host_static hdr_beg(host) -i img. video. download. ftp.
hdr_end <string>
用于测试请求报文的指定首部的结尾部分是否符合<string>指定的模式;
3、动静分离实例:
frontend http-in
    bind *:80
    mode http
    log global
    option httpclose
    option logasap
    option dontlognull
    capture request header Host len 20
    capture request header Refer len 60
    acl url_static    path_beg    -i     /static /images /javascript /stylesheets
    acl url_static    path_end    -i .jpg .gif .png .css .js

use_backend static_servers    if url_static
    default_backend    dynamic_servers

backend static_servers    
    balance roundrobin
    server imgsrv1 192.168.1.110:80 check maxconn 6000
    server imgsrv2 192.168.1.184:80 check maxconn 6000

backend dynamic_servers
    cookie srv insert nocache
    balance roundrobin
    server websrv1 192.168.1.111:80 check maxconn 1000 cookie websrv1
    server websrv2 192.168.1.112:80 check maxconn 1000 cookie websrv2

HAProxy的访问控制的更多相关文章

  1. 负载均衡服务之HAProxy访问控制ACL

    前文我们聊到了haproxy的错误页的配置,自定义日志的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12797913.html:今天我们主要来看看hap ...

  2. 负载均衡服务之HAProxy https配置、四层负载均衡以及访问控制

    前文我们聊了下haproxy的访问控制ACL的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12817773.html:今天我们来聊一聊haproxy的h ...

  3. HAProxy(二):HAProxy的ACL规则实现智能负载均衡详解与示例

    一.HAProxy的ACL的功能 ACL(Access Control List)访问控制列表,HAProxy中的ACL的匹配条件和控制条件有许多种,功能很强大,可以通过源地址.源端口.目标地址.目标 ...

  4. Haproxy基础知识 -运维小结

    开源软件负载均衡器 现在常用的三大开源软件负载均衡器分别是Nginx.LVS.Haproxy. 在之前的文章中已经对比了这三个负载均衡软件, 下面根据自己的理解和使用经验, 再简单说下这三个负载均衡软 ...

  5. Haproxy基于ACL做访问控制

    author:JevonWei 版权声明:原创作品 haproxy配置文档 https://cbonte.github.io/haproxy-dconv/ 基于ACL做访问控制(四层代理) 网络拓扑 ...

  6. HAProxy的安装与使用

    在互联网时代中,后台系统架构,经常可以听到高可用集群.负载均衡集群之类的系统架构解决方案,其中,负载均衡有基于硬件的F5.Big-IP等,也有基于软件的LVS(基于Linux操作系统实现,性能可以和基 ...

  7. 总结Lvs、nginx、Haproxy

    !!!! 参考的比较多,自己想法少 大神总结的比较好 ====>http://www.ha97.com/5646.html 特性  LVs Nginx Haproxy 工作层 四层(传输层) 七 ...

  8. haproxy para config

    .. from http://www.cnblogs.com/dkblog/archive/2012/03/13/2393321.html 常用配置选项: OPTION 选项: option http ...

  9. HAProxy学习笔记

    HAProxy:著名的负载均衡器,工作于用户空间的服务程序,其有两种工作模式: TCP mode:四层调度(模拟实现,依赖于socket进行通信) HTTP mode:七层调度 目前维护的稳定版本分支 ...

随机推荐

  1. Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc

    Atitit. visual studio vs2003 vs2005 vs2008  VS2010 vs2012 vs2015新特性 新功能.doc 1.1. Visual Studio2 1.2. ...

  2. gsub函数

    gsub(r, s [, t])    For each substring matching the regular expression r in the string t, substitute ...

  3. python剑指网络篇二

    在socket编程中 AF_INET 对应 IPv4 SOCK_STREAM 对应 TCP SOCK_DGRAM 对应 UDP

  4. 23:LVS客户端配置脚本案例

    [root@web03 scripts]# cat prevent_arp.sh #!/bin/bash lo_ip=$(ip a s lo|grep "10.0.0.1[3]/32&quo ...

  5. windows下安装JDK和Tomcat

    一.安装JDK 1.安装 JDK当前最高版本为1.7. 下载并运行JDK 1.7安装程序jdk-7u25-windows-i586.exe,直接安装到C盘(也可以在其它盘,但文件名一定要是英文名),其 ...

  6. Java基础01 从HelloWorld到面向对象(转载)

    Java是完全面向对象的语言.Java通过虚拟机的运行机制,实现“跨平台”的理念. "Hello World!" public class HelloWorld{    publi ...

  7. Spring MVC复选框

    以下示例显示如何在使用Spring Web MVC框架的表单中使用复选框(Checkbox).首先使用Eclipse IDE来创建一个WEB工程,并按照以下步骤使用Spring Web Framewo ...

  8. Android之——JNI配置C语言打印Logcat信息

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47425073 这篇文章给大家介绍一下在JNI中怎样为C语言配置打印Logcat信息 ...

  9. IOS 键盘协议之中的一个 &lt;UITextFieldDelegate&gt;

    1. 设置键盘的第一响应者后,便可通过点击TextField唤出键盘 设置键盘第一响应者方法为: [textField becomeFirstResponder];//此时,textField 输入框 ...

  10. 如何通过PHP判断年份是否是闰年----两种方法

    1.定义:闰年是对4取余为0,对100取余不等于0,对400取余等于0的年是闰年. 2.代码: 第一种方法:直接函数判断 $day = date('Y'); if ($day%4==0&&am ...