ACL(Access Control Lists,访问控制列表)是一种基于包过滤的访问控制技术,它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配),即对接收到的报文进行匹配和过滤,基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内容进行匹配并执行进一步操作,比如允许其通过或丢弃。

    此次实验,笔者准备了四台虚拟机,一台为之前编译安装的HAProxy2.4.17版本服务器,取名haproxy作为调度服务器;两台作为后端web服务器,分别取名web-server1和web-server2;一台作为客户端,取名client。

  1. 后端web服务器准备

    两台后端web服务器均安装并启动Apache服务,同时都在/var/www/html目录下创建以f1开头的静态文件和动态文件(为了省事,笔者就不专门做php的动态文件了),这些文件中只记录各自的ip。

使用HAProxy的ACL实现基于文件后缀名的动静分离_服务器

使用HAProxy的ACL实现基于文件后缀名的动静分离_服务器_02


  1. ACL实现基于文件后缀名的动静分离

    ACL配置选项格式为acl+<aclname>+<criterion>+[flags]+[operator]+[<value>],即acl+名称+匹配规范+匹配模式+具体操作符+操作对象类型。在配置文件中制定ACL的匹配条件时,我们可以加入注释以更直观的查看,结合此次实验,我们可以通过注释将ACL划分成三栏,即ACL的匹配规则(判断条件)、达到匹配条件时对应的主机分组、主机分组所对应的后端服务器。

使用HAProxy的ACL实现基于文件后缀名的动静分离_动静分离_03

    配置文件内容说明:

    ①acl setting部分:acl_static和acl_php为ACL名称;path_end属于匹配规范(判断条件),表示请求的URL中资源的结尾,即文件后缀;-i属于匹配模式,表示不区分大小写;.jpg、.jpeg和.php等则是属于具体的文件后缀对象。综合起来就是,如果文件后缀是.php的就属于acl_php,非.php为后缀的已列出的其他七种则属于acl_static。

    ②acl hosts部分:该部分主要是根据acl setting部分来进行的下一步操作,如果acl_static判定为真,就调度到后端的static_hosts分组上;如果acl_php判定为真,就调度到后端的php_hosts分组上。

    ③backend hosts部分通之前实验中一样,就是后端所对应的具体服务器信息。

  1. 测试环节

    客户端通过haproxy服务器进行web服务访问时,当文件后缀为acl_static成立时的6种,显示的内容均是由10.0.0.156服务器返回的;只有当文件后缀为.php时,显示的内容才是10.0.0.157返回的,从而做到了利用ACL来实现基于文件后缀名的动静分离。

使用HAProxy的ACL实现基于文件后缀名的动静分离_后缀_04