iRules编程手册Word格式.docx
《iRules编程手册Word格式.docx》由会员分享,可在线阅读,更多相关《iRules编程手册Word格式.docx(26页珍藏版)》请在冰豆网上搜索。
"
}{
persistuie[stringtolower[HTTP:
]]3600
}else{
setjsess[findstr[stringtolower[HTTP:
path]]"
jsessionid="
11]
if{$jsess!
="
}{
persistuie$jsess3600
}
}
whenHTTP_RESPONSE{
}{
persistadduie[stringtolower[HTTP:
简单的几行iRules程序,即可为F5设备增加基于SESSIONID的会话保持功能,精细控制流量,iRules的功能可谓十分之强大。
关于这个程序详细的实现原理,在后面章节有详细的解释说明。
2)iRules开发工具iRuleEditor
F5的iRuleEditor是一款非常优秀的iRules开发工具,可以从以下站点下载:
xp及以上操作系统中运行,需要.NETFramework运行环境。
需要注意的是,这款软件是由DevCentral发布的非官方软件,F5不对此软件提供官方服务支持;
但这样不代表着iRules的不可靠,事实上,全球大部分的LTM设备都在或多或少的使用iRules精细控制着各种应用流量,运行高效并且稳定。
正常安装后进入使用界面:
iRuleEditor支持连接F5设备,读取并存储设备中的iRules。
点击“file”-“connect”配置设备信息。
连接后,你可以开始编写你的iRules了。
iRuleEditor内置一些iRules的模板,可以选择并稍加改动,即可实现相应的功能,非常方便。
iRules写好后,直接save即可存储到F5设备中,绑定VS后即可工作。
更多关于iRuleEditor的使用技巧,请到上查询。
2.iRules编程基础
1)TCL语言和命令结构
a)TCL语言简介
TCL(读作“tickle”)语言是一种解释性脚本语言,是一种嵌入命令的脚本语言,具有使用简单,功能强大,可移植性强的特点。
熟悉TCL语法和编程技巧,对编写优秀的iRules非常重要。
b)iRules的命令结构
iRules遵从TCL语法,每一条执行语句都使用
命令参数1参数2参数3……参数n
这样的格式,如:
poolweb_pool
或者
loglocal0."
matchit"
这其中“pool”和”log“都是命令,每个命令后面的部分是参数,参数可以是一个,也可以是多个,由空格分开。
在每条语句中使用多个命令或者将一个命令的输出结果作为另一个命令的输入参数时,需要使用命令置换”[]”符号,iRules解释器会将”[]”里面的内容作为命令语句处理,如:
stringtolower[HTTP:
headerUser-Agent]
上面例子中,在”[]”中的内容是一条命令语句,输出HTTP访问协议中header头的User-Agent值,同时,将这个输出值作为string命令的第二个参数输入,配合第一个tolower参数,整个命令语句输出小写的User-Agent值。
c)iRules的注释语句
iRules的注释语句以”#”符号开头,以“;
”符号或者换行符结束。
同时需要注意的是,“#”符号必须放在每行的开头,或者前边用“;
”符号结束之前的语句。
如:
#thisisanoteline.
poolpool_web;
这两种写法都是正确的。
2)变量
变量是一切编程语言的最基本元素,iRules中有两种主要变量,简单变量和数组变量。
a)简单变量
简单变量的组成包含两部分,“变量名”和“变量值”,如:
seta100
这是一行赋值语句,“set”是命令,“a”是参数1,代表变量名,“100”是参数2,代表变量值。
这行语句执行完后,我们得到了一个值为100的变量a。
b)数组变量
数组变量是一些简单变量的元素集合,由数组变量名和数组变量值组成。
其中,数组变量名又由数组的名字和数组中元素的变量名组成,如:
arrayseta{}
seta
(1)100
seta
(2)200
这三条语句中,首先将变量a定义为数组变量,然后将数组变量a中的a
(1)和a
(2)两个数组变量值赋值为100和200。
c)全局变量
iRules是面向过程的脚本语言,也就意味着每个iRules被应用访问触发知道运行结束后不会对其他应用访问的iRules变量和执行产生任何影响。
但实际应用中,经常会遇到需要全局考虑的变量,如访问一个VS的总连接数,这时候就需要使用到全局变量,让这个变量在所有触发相同iRules的应用访问中有着相同的变量值。
全局变量的声明符号是“:
”。
set:
max_sessions10
全局变量并不是一种新型变量,只是一种变量的使用声明,全局变量有可能是简单变量,也有可能是数组变量。
d)Class
iRules中的class可以看作是全局数组变量,在F5设备的Datagroups配置界面中可以配置,一般分为四种,Address型、String型、Integer型和ExternalFile型,分别对应IP地址、字符串、数值和外部文件。
使用方法同全局的数组变量。
whenCLIENT_ACCEPTED{
if{[matchclass[IP:
local_addr]equals$:
telcom_class]}{
pooltelcom_pool
elseif{[matchclass[IP:
cuc_class]}{
poolcuc_pool
else{
pooldefault_gateway_pool
其中的matchclass为匹配语句,将后面的参数1同参数3根据参数2进行匹配,如果参数3的数组中其中有一条满足要求,返回结果为true,否则为false。
类似的语句还有
findclass<
string>
<
datagroup>
[<
separator>
]
这个命令是搜索数据组的一个某一个以指定参数开始的成员,并且返回这个匹配的Class成员。
上述的例子是BIGIPLC中常用的链路选择iRules。
e)变量的置换
当一个变量已经存在的时候,通常会在命令语句中调用变量值,这时候就需要命令的置换,将命令值作为输出,变量的置换符号是“$”,如:
setb$a
首先定义变量值为100的变量a,然后将变量a的变量值100作为第二行赋值语句的输入,定义变量b,变量值为100。
需要注意的是,要使用变量值时应使用$符,而在设置或改变变量值时不必使用$。
3)数据类型
a)数值和字符串
iRules不支持诸如int、float、double或char之类的变量类型。
这意味着,在同一程序中,一个变量可以在不同的时刻分别被设置为数值、字符或字符串。
iRules的数字支持整数、八进制(以0开头)、十六进制(以0x开头)和实数。
对于字符串,需要使用””进行标明。
setb“100”
两行赋值语句执行后,变量a的值为整数100,变量b的数值为字符串”100”。
b)反斜杠置换
iRules中的反斜杠置换符”\”和C语言中的一样,主要用于在单词符号中插入诸如换行符、空格、[、$等被iRules解释器当作特殊符号对待的字符。
iRules中支持以下反斜杠置换:
\aAudiblealert(0x7)
\bBackspace(0x8)
\fFormfeed(0xc)
\nNewline(0xa)
\rCarriagereturn(0xd)
\tTab(0x9)
\vVerticaltab(0xb)
\dddOctalvaluegivenbyddd(one,two,orthreed'
s)
\xhhHexvaluegivenbyhh(anynumberofh'
\newlinespaceAsinglespacecharacter.
c)双引号和大括号
iRules解释器对双引号中的各种分隔符将不作处理,但是对换行符及”$”和”[]”两种置换符会照常处理。
而”{}”中,所有特殊字符都将失去意义,变成普通字符。
seta3
setb{$a+2}
expr$b*4
返回11,而不是4的倍数。
这是因为TCL的语法编译器会最先替换变量b为$a+2,然后expr命令将计算表达式$a+2*4。
4)操作符
a)运算符和优先级
下表的运算符蓝色部分按照由高到低的优先级顺序排列:
语法形式
结果
-a!
a~a
负a非a
a*ba/ba%b
乘除取模
a+ba-b
加减
a<
<
ba>
>
b
左移位右移位
ba<
=ba>
=b
小于大于小于等于大于等于
a==ba!
等于不等于
a&
位操作与
a^b
位操作异或
a|b
位操作或
a