HAProxy的高级配置选项-ACL篇之基于域名匹配案例

本文涉及的产品
.cn 域名,1个 12个月
简介: 这篇文章介绍了HAProxy的高级配置选项中的ACL(访问控制列表)功能,特别是如何基于域名匹配进行流量分发的案例,包括ACL的基本概念、语法、使用场景和配置实例。

作者:尹正杰
版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.ACL概述

  acl:
    对接收到的报文进行匹配和过滤,基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内容进行匹配并执行进一步操作。
    官方文档:http://cbonte.github.io/haproxy-dconv/1.8/configuration.html#7  
  ACL语法如下:
    acl <aclname> <criterion> [flags] [operator] [<value>] ...
    acl   名称       条件      条件标记位  具体操作符   操作对象类型    
  示例:
    acl my_acl hdr_dom(host) -i node106.yinzhengjie.org.cn

1>.ACL名称

  可以使用大字母(A-Z),小写字母(a-z),冒号(":"),点("."),中横线("-")和下划线("_");并且严格区分大小写,比如"my_acl"和"My_acl"完全是两个不同的acl。

2>.ACL derivatives

  hdr([<name> [,<occ>]]):  
    完全匹配字符串

  hdr_beg([<name> [,<occ>]]):  
    前缀匹配

  hdr_dir([<name> [,<occ>]]):  
    路径匹配

  hdr_dom([<name> [,<occ>]]):  
    域匹配

  hdr_end([<name> [,<occ>]]):  
    后缀匹配

  hdr_len([<name> [,<occ>]]):  
    长度匹配

  hdr_reg([<name> [,<occ>]]):  
    正则表达式匹配

  hdr_sub([<name> [,<occ>]]):  
    子串匹配

3>.Criterion-acl

  <criterion> :
    匹配条件
      dst:
        目标IP
      dst_port: 
        目标PORT
      src: 
        源IP
      src_port: 
        源PORT

  hdr <string>:
    用于测试请求头部首部指定内容
      hdr_dom(host): 
        请求的host名称,如www.yinzhengjie.org.cn
      hdr_beg(host): 
        请求的host开头,如www. img. video. download. ftp.
      hdr_end(host): 
        请求的host结尾,如.com .net .cn
      path_beg:
        请求的URL开头,如/static、/images、/img、/css
      path_end:
        请求的URL中资源的结尾,如.gif .png .css .js .jpg .jpeg

4>.flags

  <flags>:  
    -条件标记
      -i:   
        不区分大小写
      -m:   
        使用指定的pattern匹配方法
      -n:   
        不做DNS解析
      -u:   
        禁止acl重名,否则多个同名ACL匹配或关系

5>.operator(操作符)

  整数比较:  
    eq:  
      等于  
    ge:  
      大于等于  
    gt:  
      大于  
    le:  
      小于等于  
    lt:  
      小于

  字符比较:
    -exact match (-m str):  
      字符串必须完全匹配模式
    -substring match (-m sub):  
      在提取的字符串中查找模式,如果其中任何一个被发现,ACL将匹配
    -prefix match (-m beg):  
      在提取的字符串首部中查找模式,如果其中任何一个被发现,ACL将匹配
    -suffix match (-m end):  
      将模式与提取字符串的尾部进行比较,如果其中任何一个匹配,则ACL进行匹配
    -subdirmatch (-m dir):  
      查看提取出来的用斜线分隔("/")的字符串,如果其中任何一个匹配,则ACL进行匹配
    -domain match (-m dom):  
      查找提取的用点(".")分隔字符串,如果其中任何一个匹配,则ACL进行匹配

6>.value

  <value>的类型如下:
    -Boolean 
      布尔值false,true
    -integer or integer range:
      整数或整数范围,比如用于匹配端口范围,1024~32768
    -IP address/network:
      IP地址或IP范围, 192.168.0.1 ,192.168.0.1/24
    -string
      exact:
        精确比较
      substring:
        子串 
      suffix:
        后缀比较
      prefix:
        前缀比较
      subdir:
        路径,/wp-includes/js/jquery/jquery.js
      domain:
        域名,如www.yinzhengjie.org.cn
    -regular expression:
      正则表达式
    -hex block:
      16进制

7>.Acl定义与调用

多个acl作为条件时的逻辑关系:
  与:
    隐式(默认)使用,如"if valid_src valid_port"   
  或:
    使用"or"或"||"表示,如"if invalid_src || invalid_port"   
  否定:
    使用"!"表示,如"if ! invalid_src"

二.HAProxy基于域名匹配实战案例

1>.编辑haproxy的配置文件

[root@node102.yinzhengjie.org.cn ~]# cat /etc/haproxy/haproxy.cfg
global
    maxconn 100000
    chroot /yinzhengjie/softwares/haproxy
    stats socket /yinzhengjie/softwares/haproxy/haproxy.sock mode 600 level admin
    user haproxy
    group haproxy
    daemon
    nbproc 2
    cpu-map 1 0
    cpu-map 2 1
    nbthread 2
    pidfile /yinzhengjie/softwares/haproxy/haproxy.pid
    log 127.0.0.1 local5 info

defaults
    option http-keep-alive
    option  forwardfor
    option redispatch
    option abortonclose
    maxconn 100000
    mode http
    timeout connect 300000ms
    timeout client  300000ms
    timeout server  300000ms

listen status_page
    bind 172.30.1.102:8888
    stats enable
    stats uri /haproxy-status
    stats auth    admin:yinzhengjie
    stats realm "Welcome to the haproxy load balancer status page of YinZhengjie"
    stats hide-version
    stats admin if TRUE
    stats refresh 5s

frontend WEB_PORT_80
    bind 172.30.1.102:80
    mode http
    #定义ACL
    acl my_pc_page hdr_dom(host) -i pc.yinzhengjie.org.cn
    acl my_mobile_page hdr_dom(host) -i mobile.yinzhengjie.org.cn
    #调用ACL
    use_backend pc_web if my_pc_page
    use_backend mobile_web if my_mobile_page
    #如果前面的ACL都没有匹配成功就访问默认的ACL
    default_backend backup_web

backend pc_web
    server web01 172.30.1.106:80 check inter 3000 fall 3 rise 5

backend mobile_web
    server web02 172.30.1.107:80 check inter 3000 fall 3 rise 5

backend backup_web
    server web03 172.30.1.108:80 check inter 3000 fall 3 rise 5 
[root@node102.yinzhengjie.org.cn ~]# 
[root@node102.yinzhengjie.org.cn ~]# systemctl restart haproxy            #别忘记重启haproxy使得配置文件生效,启动成功后可以观察状态页,观察服务是否正常,如下图所示。
[root@node102.yinzhengjie.org.cn ~]#

2>.编辑window客户端的本地文件解析记录,如下图所示。

3>.浏览器访问"http://pc.yinzhengjie.org.cn/",如下图所示。

4>.浏览器访问"http://mobile.yinzhengjie.org.cn/",如下图所示。

5>.浏览器访问"http://node.yinzhengjie.org.cn/",如下图所示。

目录
相关文章
|
3月前
|
网络协议 Java 应用服务中间件
tomcat配置域名及HTTPS
tomcat配置域名及HTTPS
|
5天前
|
运维 监控 安全
在实际应用中,如何选择基于不同域名还是不同 IP 进行代理多服务的配置?
综上所述,在实际应用中选择基于不同域名还是不同 IP 进行代理多服务的配置,需要根据具体的业务需求、可扩展性、性能、安全性以及维护和管理成本等多方面因素进行综合考虑,权衡利弊,选择最适合自己系统架构和运营需求的配置方式。
|
1月前
|
安全 应用服务中间件 Shell
nginx配置https的ssl证书和域名
nginx配置https的ssl证书和域名
|
2月前
|
Apache 数据安全/隐私保护
HAProxy的高级配置选项-ACL篇之域名重定向案例
这篇文章介绍了HAProxy的ACL(访问控制列表)功能,特别是如何基于域名进行重定向的高级配置选项,并通过实战案例展示了如何配置ACL规则以实现基于特定域名的HTTP重定向。
82 6
HAProxy的高级配置选项-ACL篇之域名重定向案例
|
2月前
|
PHP
ThinkPHP 多应用配置,及不同域名访问不同应用的配置【详解】
本文详解了在ThinkPHP框架中配置多应用的方法,包括安装扩展、删除默认controller文件夹、创建多应用、修改配置文件以启用多应用、测试访问以及如何配置不同域名访问不同应用的步骤。
ThinkPHP 多应用配置,及不同域名访问不同应用的配置【详解】
|
2月前
|
JavaScript 应用服务中间件 Linux
宝塔面板部署Vue项目、服务端Node___配置域名
本文介绍了如何使用宝塔面板在阿里云服务器上部署Vue项目和Node服务端项目,并配置域名。文章详细解释了安装宝塔面板、上传项目文件、使用pm2启动Node项目、Vue项目打包上传、以及通过Nginx配置域名和反向代理的步骤。
492 0
宝塔面板部署Vue项目、服务端Node___配置域名
|
30天前
|
域名解析 网络协议
非阿里云注册域名如何在云解析DNS设置解析?
非阿里云注册域名如何在云解析DNS设置解析?
|
1月前
|
存储 安全 数据库
阿里云最新域名注册和续费、企业邮箱、云虚拟主机收费标准与价格参考
域名注册和续费以及企业邮箱和云虚拟主机是很多用户上云第一步需要购买的产品,从2024年9月1日开始,全球域名又迎来了一波价格上调,目前阿里云的.com英文域名的注册价格由原来的78元涨价到了83元,续费价格也涨到了90元,不过企业新用户注册有1元购等活动。企业邮箱目前活动价540.00元/1年起,云虚拟主机独享基础增强版月付49元/1个月起,年付588元/1年起。本文为大家整理汇总了截止目前,阿里云域名注册和续费及转入收费标准、企业邮箱收费标准与活动价格、云虚拟主机最新收费标准,以供参考。
|
1月前
|
弹性计算 网络协议 安全
如何使用阿里云虚拟主机和域名设置网站?
如何使用阿里云虚拟主机和域名设置网站?
|
1月前
|
移动开发 安全 API
阿里云最新域名注册及续费和转入收费价格表参考
目前域名注册管理机构(Verisign)已上调.com中英文域名成本,这一变动将直接影响到全球范围内.com域名价格,各大注册商的.com域名注册、续费、转移价格已同步上涨。以阿里云为例,此次涨价之后,.com英文域名的注册价格由原来的78元涨价到了83元,续费价格也涨到了90元,下面是2024年9月1日涨价之后,阿里云最新的域名注册及续费和转入最新收费价格表。

热门文章

最新文章