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

少年意气强不羁,虎胁插翼白日飞。这篇文章主要讲述使用HAProxy的ACL实现基于文件后缀名的动静分离相关的知识,希望能为你提供帮助。
      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。




  1. ACL实现基于文件后缀名的动静分离
    ACL配置选项格式为acl+< aclname> +< criterion> +[flags]+[operator]+[< value> ],即acl+名称+匹配规范+匹配模式+具体操作符+操作对象类型。在配置文件中制定ACL的匹配条件时,我们可以加入注释以更直观的查看,结合此次实验,我们可以通过注释将ACL划分成三栏,即ACL的匹配规则(判断条件)、达到匹配条件时对应的主机分组、主机分组所对应的后端服务器。
【使用HAProxy的ACL实现基于文件后缀名的动静分离】
    配置文件内容说明:
    ①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来实现基于文件后缀名的动静分离。


    推荐阅读