HAProxy的高級配置選項-ACL篇之基於域名匹配案例


               HAProxy的高級配置選項-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:
      整數或整數范圍,比如用於匹配端口范圍,102432768
    -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/",如下圖所示。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM