基本介紹正則表達式
IRules主要應用在F5負載均衡設備GTM、LTM和LC,它使用的是TCL語言,由事件、命令和邏輯三部分組成。它能夠工做在OSI模型的3-7層,根據協議的不一樣,實現不一樣的功能。編程
IRules的功能:
服務器
一、實現了對全部TCP、UDP應用的數據包分析與信息提取功能;網絡
二、根據數據信息進行分流;負載均衡
三、雙向的數據流改寫功能;ide
四、選擇性地址轉換(iSNAT);函數
五、基於內容的會話保持。this
iRules能夠根據提取的信息(好比ip、http header、http uri等)進行數據分流,使得不一樣的請求類型分配到不一樣的服務器羣中。如根據文件類型選擇不一樣的服務器、依據遊覽器不一樣選擇不一樣服務器、根據用戶類型不一樣選擇不一樣服務器等。spa
F5設備的Full Proxy結構使其有了雙向數據改寫的能力。與其餘傳統的網絡交換機不一樣,BIGIP能夠對任意內容進行改寫,例如TCP Content,UDP Content,HTTP Request,HTTP Response等內容進行修改。如改寫uri、在header中插入證書信息、選擇性的地址轉換、基於內容的會話保持等。orm
編程基礎
TCL語言是一種解釋性腳本語言,是一種嵌入命令的腳本語言。
iRules的命令結構:
命令 參數1 參數2 參數3 ... 參數n #this is a note
TCL語言和命令結構:
if {觸發條件} {觸發動做}
elseif {觸發條件} {觸發動做}
else {觸發動做}
事件是iRules構成中的重要的一部分,不一樣事件表明數據在整個訪問過程當中的邏輯位置。通常用when開頭。
命令是irules中對數據進行操做的直接函數,如:[HTTP::uri],該命令中HTTP表明HTTP協議,uri表示取這個http訪問中的uri,他們之間用「::」鏈接,表明從屬關係,uri是屬於HTTP這個命令體系的,相似的還有:[IP::addr]、[TCP::payload]、[SSL::handshake]等。
邏輯運算符:
contains 包含
matches 匹配
equals(==) 等於
starts_with 以開始
ends_with 以結束
matches_regex 正則表達式匹配
not(!) 非
and(&) 與
or(|) 或
開始寫iRules
一、第一個irules
when HTTP_REQUEST {
log local0.info "Hello World!"
}
二、DNS解析
when DNS_REQUEST {
if {IP::addr [IP::remote_addr]/24 equals 10.1.1.0/24} {
host 192.168.10.11
}
else{
host 10.10.10.10
}
}
三、不一樣請求來源分發不一樣的pool
when DNS_REQUEST {
if {IP::addr [IP::client_addr] equals 10.1.1.100} {
pool my_pool_A
}
else{
pool my_pool_B
}
}
四、多種不一樣請求來源鏈接到不一樣的pool
class private_net {
network 10.0.0.0/8
network 172.16.0.0/12
network 192.168.0.0/16
}
when HTTP_REQUEST {
if {[matchclass [IP::client_addr] equals ::private_net]} {
pool internal_pool
}else{
pool default_pool
}
}
五、HTTP跳轉
when HTTP_REQUEST {
if {[HTTP::uri] contains "a"} {
HTTP::redirect http://a.com
}else{
HTTP:redirect http://b.com
}
}