Haproxy 常用acl規則與會話保持

來源:互聯網
上載者:User

標籤:haproxy

一、常用的acl規則

       haproxy的ACL用於實現基於請求報文的首部、響應報文的內容或其它的環境狀態資訊來做出轉寄決策,這大大增強了其配置彈性。其配置法則通常分為兩步,首先去定義ACL,即定義一個測試條件,而後在條件得到滿足時執行某特定的動作,如阻止請求或轉寄至某特定的後端。定義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;僅支援使用正整數(如果出現類似小數的標識,其為通常為版本測試),且支援使用的操作符有5個,分別為eq、ge、gt、le和lt;
    字串:支援使用“-i”以忽略字元大小寫,支援使用“\”進行轉義;如果在模式首部出現了-i,可以在其之前使用“--”標誌位;   

   regular expressions:Regex:其機制類同字串匹配;

   IP addresses and networks:IP地址及網路地址;
同一個acl中可以指定多個測試條件,這些測試條件需要由邏輯操作符指定其關係。條件間的組合測試關係有三種:“與”(預設即為與操作)、“或”(使用“||”操作符)以及“非”(使用“!”操作符)。


常用的測試標準(criteria):
1. 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

2. fe_sess_rate(frontend) <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

3. hdr(header) <string>

     用於測試請求報文中的所有首部或指定首部是否滿足指定的條件;指定首部時,其名稱不區分大小寫,且在括弧“()”中不能有任何多餘的空白字元。測試伺服器端的響應報文時可以使用shdr()。例如下面的例子用於測試首部Connection的值是否為close。

    hdr(Connection) -i close

4. method <string>

    測試HTTP請求報文中使用的方法。

5. path_beg <string>

     用於測試請求的URL是否以<string>指定的模式開頭。下面的例子用於測試URL是否以/static、/iilannis、/javascript或/stylesheets頭。

    acl url_static       path_beg     -i   /static /iilannis /javascript /stylesheets   

                                           #url 目錄                                                 

6. path_end <string>

     用於測試請求的URL是否以<string>指定的模式結尾。例如,下面的例子使用者測試URL是否以jpg、gif、png、css或js結尾。

    acl url_static       path_end       -i    .jpg .gif .png .css .js

                                                 #url 結尾檔案                                                                                  

7. hdr_beg <string>

     用於測試請求報文的指定首部的開頭部分是否符合<string>指定的模式。例如,下面的例子用記測試請求是否為提供靜態內容的主機img、video、download或ftp。

    acl host_static hdr_beg(host) -i img. video. download. ftp.

8. hdr_end <string>

     用於測試請求報文的指定首部的結尾部分是否符合<string>指定的模式。例如,下面的例子用記測試請求是否為

9. hdr_reg <string>

     正則匹配 

     acl bbs hdr_reg(host) -i ^(bbs.test.com|shequ.test.com|forum)

             use_backend  bbs_pool if bbs or bbs_path       #注意 "or"                                                                       


二、會話保持

haproxy負載平衡保持用戶端和伺服器Session的三種方式:

2.1 使用者源IP 識別

  haroxy 將使用者IP經過hash計算後 指定到固定的真實伺服器上(類似於nginx 的IP hash 指令)

配置指令 balance source

backend www

mode http

balance source

server web1  192.168.0.150:80 check inter 1500 rise 3 fall 3

server web2  192.168.0.151:80 check inter 1500 rise 3 fall 3

 

2.2 cookie 識別

haproxy 將WEB服務端發送給用戶端的cookie中插入(或添加加首碼)haproxy定義的後端的伺服器COOKIE ID。

配置指令例舉 cookie SESSION_COOKIE insert indirect nocache

用firebug可以觀察到使用者的要求標頭的cookie裡 有類似" Cookie jsessionid=0bc588656ca05ecf7588c65f9be214f5;

SESSION_COOKIE=app1"

SESSION_COOKIE=app1就是haproxy添加的內容。

 

backend COOKIE_srv

mode http

cookie SESSION_COOKIE insert indirect nocache

server web1 192.168.0.150:80  cookie 1 check inter 1500 rise 3 fall 3

server web2 192.168.0.151:80  cookie 2 check inter 1500 rise 3 fall 3

 

2.3 session 識別

haproxy 將後端伺服器產生的session和後端伺服器標識存在haproxy中的一張表裡。用戶端請求時先查詢這張表。

配置指令:appsession <cookie> len <length> timeout <holdtime>

配置指令例舉 appsession JSESSIONID len 64 timeout 5h request-learn

配置舉例

backend APPSESSION_srv

mode http

appsession JSESSIONID len 64 timeout 5h request-learn

server web1 192.168.0.150:80 cookie 1 check inter 1500 rise 3 fall 3

server web2 192.168.0.151:80 cookie 2 check inter 1500 rise 3 fall 3


本文出自 “蘭州linux營運” 部落格,請務必保留此出處http://linuxzkq.blog.51cto.com/9379412/1701630

Haproxy 常用acl規則與會話保持

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.