You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
TECHNICAL BRIEF<br />
<strong>BIG</strong>-<strong>IP</strong> <strong>IP</strong> <strong>v9</strong> <strong>iRule</strong> A to Z<br />
I. はじめに<br />
このドキポメベンルトでは <strong>BIG</strong>-<strong>IP</strong> <strong>v9</strong> の <strong>iRule</strong> について、 機 能 を 紹 介 するとともに 実 際 のサンルハャを 用 いながら 解 説<br />
します。 尚 、 特 に 断 りが 無 い 限 り <strong>iRule</strong> の 記 述 方 法沵 や 使 用 されているコカマンルドは 9.1 の 仕 様 に 基 づいています。<br />
このため、 文 中 にある <strong>v9</strong> という 記 述 は 9.1 を 指 します。<br />
II.<br />
III.<br />
<strong>iRule</strong> とは<br />
<strong>iRule</strong> とは、VirtualServer( 以 下 VS)に 関 連 付 けられるオノグェェトのうちの 1 つで、VS に 到 着 したパォットに<br />
対 して 記 述 されたケェモハトの 内 容 をもとに 様 々な 処 理 を 行 います。 処 理 されたパォットは VS に 設 定 される<br />
Default pool だけではなく <strong>iRule</strong> で 書暯 かれた pool や node へ 送 ることもできます。また、v4.x と 同 様 に <strong>iRule</strong><br />
がパヴクケテンルケでも 使 用 でき、 更暬 に 認 証 にも 使 用 されます。<br />
<strong>v9</strong> の <strong>iRule</strong> は TCL 言 語 を 用 いており、 従 来曹 よりも 汎 用 性 の 高 い 実 装 で 様 々な 用 途 に 使 用 できます。<br />
TCL<br />
TCL(テ゛ェャ)は Tool Command language の 略 で、 標 準 的 なケェモハト 言 語 のうちのひとつです。これは 集 積<br />
回 路 の 設 計 に 使 用 されるケェモハトを C 言 語 のラ゜ノラモ・パッォヴグとして 組 み 込 んで 汎 用 な 目 的 に 使 用 でき<br />
るようにするために 開 発 された 言 語 です。ケェモハト 言 語 とは、ソサヴケコカヴドを 記 述 して 実 行 する 前 にマヴギヴ<br />
がコカンルパ゜ャすることはなく、ケェモハトを 実 行 するたびに 自 動 的 にコカンルパ゜ャが 行 わわれる 種 類 の 言 語 です。<br />
Ruby や PHP もケェモハト 言 語 です。 最暷 近 TCL は 主 に TCL/Tk(Tool kit)という 形 で、GUI ゚ハモォヴクミンルの<br />
開 発 に 使 用 されることが 多 くなっています。<br />
1. TCL の 文 法沵 に 関 するャヴャ<br />
このセコェクミンルでは TCL ケェモハトを 作 成 するにあたって 理 解 しておく 必 要 がある 一 般 的 な 文 法沵 について 解<br />
説 します。<br />
i. 基 本曓 のコカマンルドラ゜ンル<br />
コマンド アーギュメント 1 アーギュメント 2<br />
という 形 でコカマンルドの 後 に゚ヴギポメベンルトが 続 きます。 例 えば 変 数 に 値 を 格 納 するコカマンルドである set を 使<br />
用 して a という 変 数 に 1 を 格 納 するコカマンルドは 以 下 の 通 りです。<br />
set a 1<br />
ii.<br />
ジノャェォヴテヴクミンル<br />
シノ、ノランルェ、 改 行 の 制 御 文 字 となる 文 字 を 含 む゚ヴギポメベンルトを 使 用 するにはジノャェォヴテヴクミンル<br />
を 使 用 します。<br />
set ABC "a b c d"<br />
改 行 コカヴドを゚ヴギポメベンルト 内 に 含 む 際 にこのジノャェォヴテヴクミンルを 使 用 します。<br />
set テスト 結 果 "<br />
国 語 30<br />
算 数 20<br />
"<br />
この 場 合 、”ぱヴギポメベンルトに 含 まれません。<br />
また、"ぱヴギポメベンルトの 先 頭 に 記 述 される 場 合 においてのみ 上 記 のように 振 舞 います。゚ヴギポメベンルト<br />
の 途 中 にある 場 合 は 単 に 文 字 列 の 1 つとして 扱 わわれます。<br />
iii.<br />
$ 文 字<br />
゚ヴギポメベンルト 内 に 記 述 されている$は 変 数 置 換 子 と 呼 ばれ、$ 以 降 からつぎのノランルェ、シノ、 改 行 まで<br />
の 文 字 が 変 数 とみなされます。 下 の 例 では a に 1000 がセコットされます。<br />
F5 Networks Japan K.K. 1 July, 2005
TECHNICAL BRIEF<br />
iv.<br />
set b 1000<br />
set a $b<br />
ケェウェ゚ノラォット(“[“,”]”)<br />
゚ヴギポメベンルト 内 に 記 述 されている[および]はコカマンルド 置 換 子 と 呼 ばれ、[]で 囲 まれた 文 字 列 がコカマンルドラ<br />
゜ンルとみなされ、その 実 行 結 果 が゚ヴギポメベンルトとしてコカマンルドに 渡浫 されます。この 動 作 をコカマンルド 置 換 と<br />
呼 びます。<br />
以 下 の 例 は 計 算 結 果 を 変 数 に 格 納 します。<br />
set a [ expr 1+1 ]<br />
また、コカマンルド 置 換 は 以 下 のようにネヅケトすることも 可 能 です。 更暬 に 改 行 コカヴドを 含 むことも 可 能 です。<br />
set a [ expr 1+ [ expr b*20]]<br />
v. バッェケラックポ 記 号<br />
改 行 コカヴド()やシノ()を 記 述 する 際 に 使 用 します。また、 上 記 の 置 換 子 の 前 にバッェケラックポを 付 加 する<br />
と 単 に 文 字 として 扱 わわれます。<br />
vi.<br />
ノヤヴケ 引 用 符<br />
゚ヴギポメベンルトをノヤヴケ 引 用 符 で 囲 むことによって、 囲 まれた 部 分 に 含 まれるあらゆる 特 殊 文 字 の 機 能 を<br />
無 効 化 します。<br />
set a {[set テケト $ 国 語 ]}<br />
この 場 合 、 変 数 a には[set テケト $ 国 語 ]という 文 字 列 が 格 納 されます。また、ジノャェォヴテヴクミンルと<br />
同 様 に、この 機 能 はノヤヴケの 開 始 が゚ヴギポメベンルトの 最暷 初 に 記 述 されているときのみ 有暼 効 です。<br />
vii.<br />
変 数 の 型 と 名 前<br />
TCL の 変 数 には 型 が 用 意 されていませんが、TCL のコカマンルドは TCL パヴサヴから 渡浫 された 変 数 値 を 整 数 や<br />
実 数 、 論 理 型 として 取 り 扱 います。<br />
変 数 の 名 前 には 全 ての 文 字 が 使 用 可 能 ですが、 特 殊 文 字 が 含 まれる 変 数 名 を 使 用 する 際 には 特 殊 文 字 をエケ<br />
ォヴハするためにノヤヴケが 必 要 になります。<br />
puts ${テスト. 国 語 }<br />
このような 面 倒 を 避 けるために 特 殊 文 字 は 使 用 しないほうが 良 いでしょう。<br />
viii.<br />
ix.<br />
変 数 のケコカヴハ<br />
変 数 の 型 をコカマンルドで 管 理 しているのに 対 し、 変 数 のケコカヴハは TCL パヴサが 管 理 しています。<br />
変 数 のケコカヴハにはエュヴバャ 変 数 、ュヴカャ 変 数 がサポヴトされています。ュヴカャ 変 数 はハュクヴグャホ<br />
内 に 作 成 され、 終 了 すると 削 除 されます。これに 対 しエュヴバャ 変 数 は 変 数 に゚ェセコケする 前 に 予 め 宣 言 し<br />
ておかなければなりません。エュヴバャ 変 数 は 宣 言 時昷 に global コカマンルドを 使 用 します。<br />
TCL では 全 ての 変 数 を 削 除 でき、それを 明 示 的 に 削 除 したい 場 合 は unset を 使 用 します。<br />
配 列 変 数<br />
TCL では 配 列 変 数 は 変 数 名 ( 添浘 え 字 )で 表 され、 他 の 変 数 と 同 様 、 事 前 の 宣 言 や 要 素 数 の 指 定 は 必 要 ありま<br />
せん。 以 下 のように 同 名 の 通 常 変 数 と 配 列 変 数 を 同 一 のケェモハト 内 で 使 用 することはできません。<br />
set a 300<br />
set a(1) 400<br />
また、 要 素 数 は 数 字 である 必 要 は 無 く、 文 字 列 も 使 用 できます。<br />
set a(jkl) 200<br />
F5 Networks Japan K.K. 2 July, 2005
TECHNICAL BRIEF<br />
ただし、 利 用 の 利 便 性 を 考 えると 数 字 を 使 用 するのが 一 般 的 です。<br />
要 素 を , や . で 区 切 って 複 数 記 述 することによって 多 次 元 配 列 を 使 用 できます。<br />
set variable(a.1) 200<br />
set index 1<br />
-> このとき variable(a.$index)は 200<br />
x. モケト<br />
複 数 のデヴシの 集 まりを 1 つのデヴシのように 処 理 する TCL 特 有暼 の 機 能 です。<br />
配 列 と 異 なり 特 有暼 の 使 用 方 法沵 があるわわけではなく、 扱 いは 普晘 通 の 変 数 と 同 様 です。モケトの 要 素 の 区 切 り 文<br />
字 として 使 用 されるのはノランルェ、シノ、 改 行 です。 要 素 にこれらの 文 字 を 含 む 場 合 は 前 述 の 通 りノラォッ<br />
ト({})で 囲 みます。<br />
math 70 {physical education} 80<br />
このモケトには 4 個 の 要 素 が 含 まれています。また、ノラォットはネヅケトすることも 可 能 です。 上 記 の 場 合 、<br />
physical education が 1 つの 要 素 として 得 られますが、この 要 素 を 更暬 に 2 つの 要 素 からなるモケトとして<br />
扱 うことができます。モケトを 操 作 するには 予 め 用 意 されているモケト 操 作 用 コカマンルドを 使 用 します。<br />
モケトの 生 成<br />
set TESTLIST [list math 70 “physical education” 80]<br />
モケトから i 番 目 の 要 素 をの 取 り 出 す<br />
set El [lindex $TESTLIST $i]<br />
モケトの 要 素 を 取 り 出 してャヴハする<br />
foreach el $TESTLIST {<br />
puts $elem<br />
}<br />
2. コカマンルド<br />
TCL で 使 用 される 基 本曓 的 なコカマンルドとその 例 は Appendix i を 参 照 してください。<br />
3. <strong>BIG</strong>-<strong>IP</strong> での 利 用 制 限<br />
<strong>iRule</strong> では 使 用 できない TCL コカマンルドがあります。コカマンルドのモケトは Appendix ii を 参 照 してください。<br />
4. <strong>iRule</strong> を 使 用 する 際 の 基 本曓 ャヴャ<br />
i. ゜パンルトを 指 定 する<br />
<strong>iRule</strong> は゜パンルトパヴケの 設 定 です。ケェモハトの 本曓 文 がどの゜パンルトに 基 づいて 使 用 されるかを 記 述 する<br />
必 要 があります。゜パンルトの 種 類 と 説 明 は” Configuration Guide for Local Traffic Management”を 参 照<br />
してください。<br />
ii.<br />
接 続 先 pool/node の 決 定<br />
<strong>v9</strong> の <strong>iRule</strong> では 必 ずしも <strong>iRule</strong> の 中 で 接 続 先 の pool や node を 指 定 する 必 要 はありません。ですから、 以<br />
下 のように 単 にュギンルエするための <strong>iRule</strong> を 作 成 することも 可 能 です。<br />
when HTTP_REQUEST {<br />
}<br />
log local0. “this is a test”<br />
F5 Networks Japan K.K. 3 July, 2005
TECHNICAL BRIEF<br />
IV.<br />
設 定 方 法沵<br />
<strong>BIG</strong>-<strong>IP</strong> での Rule の 設 定 方 法沵 を 以 下 に 示 します。 関 連 付 けられる pool や VirtualServer( 以 下 VS)は 予 め 作 成 され<br />
ているものとします。<br />
1. 新 規 Rule の 作 成<br />
Tips : 新 規 に 作 成 する 場 合 は、+ 記 号 をェモ<br />
ッェすることで 一 覧 表 示 画 面 をケキッハし<br />
て 新 規 作 成 画 面 に 移 ることができます。<br />
2. Rule の 編 集<br />
<strong>v9</strong> には、v4.x のような Rule Builder はありません。このため、 全 ての Rule をエデ゛シで 記 述 する 必 要 があ<br />
ります。また、ケェモハト 本曓 文 のほかに 名 前 をつける 必 要 があります。この 名 前 は 多 くの Rule を 作 成 したと<br />
きに 目 的 の Rule を 検 索 する 際 に 便 利 です。<br />
記 述 した 後 、Finished ボシンルをェモッェして 保 存 します。この 際 Rule 名 と 文 法沵 および Rule の 中 で 使 用 され<br />
るオノグェェトの 存 在 確 認 スェッェが 行 わわれ、エラヴがあると Rule を 保 存 できません。<br />
3. VS への 適 用<br />
作 成 した Rule を VS の 設 定 画 面 を 使 用 して VS に 適 用 します。Rule は Pool と 同 様 に Resource の 一 部 として<br />
F5 Networks Japan K.K. 4 July, 2005
TECHNICAL BRIEF<br />
設 定 されます。<br />
V. Rule 作 成 のテェッッェ<br />
1. デバッエ<br />
v4 系 と 互 換 性 があるものの、<strong>iRule</strong> の 強 みを 最暷 大 限 に 発 揮 するには <strong>v9</strong> 固 有暼 の 考 え 方 やコカヴデ゛ンルエが 必 要 で<br />
ある 上 に、より 複 雑 な 処 理 が 可 能 になるためコカヴドが 複 雑 化 しがちです。 複 雑 なコカヴドはエラヴを 誘 発 しし、<br />
デバッエが 必 要 になることがあるでしょう。デバッエ 手 段 のうちのひとつとして 有暼 効 なものはュエ 出 力 です。<br />
以 下 の 要 領 で 各 所 にュギンルエの 行 を 挿 入 し、 変 数 の 値 が 想 定 どおりにセコットされているか、またはコカマンルドの<br />
実 行 結 果 や 戻 り 値 が 想 定 どおりか 等 をスェッェします。<br />
もちろん 変 数 に 限 らずコカマンルドを 記 述 することもできます。<br />
when HTTP_REQUEST {<br />
….<br />
log local0. “section1, a is $a”<br />
…..<br />
when CLIENT_ACCEPTED {<br />
….<br />
log local0. “section1, Bandwidth is [TCP::bandwidth]”<br />
…..<br />
2. エュヴバャ Rule<br />
一 般 的 に、<strong>iRule</strong> のケコカヴハはそのコカネヅェクミンル 内 のみであり、 複 数 のコカネヅェクミンルに 跨 った 処 理 をすること<br />
ができません。しかしながら、RULE_INIT ゜パンルトを 使 用 することにより、その Rule を Resource として 使<br />
用 している 全 ての VS の 情 報 を 一 元 的 に 管 理 することが 出 来曹 ます。<br />
具 体 的 には VS で 保 持 しているコカネヅェクミンル 数 による 制 御 等 が 可 能 です。<br />
3. Rule 作 成 時昷 の 注泃 意<br />
<strong>iRule</strong> には、 一 般 的 なハュエラミンルエの 定 石 が 適 用 されます。 従 って、ャヴハの 多 用 による 複 雑 な 制 御 やエュ<br />
ヴバャ 変 数 の 利 用 はパフォヴマンルケに 対 して 影 響 を 与 えることに 注泃 意 してください。<br />
F5 Networks Japan K.K. 5 July, 2005
TECHNICAL BRIEF<br />
VI.<br />
実 践 編<br />
ここでは 実 際 の Rule を 動 作 を 説 明 しながら 紹 介 していきます。<br />
1. <strong>BIG</strong>-<strong>IP</strong> に Sorry サヴバの 役 割 を 持 たせる Rule<br />
サ゜トが 停 止 しているときに、 実 web サヴバのかわわりにモェエケトを 受 け 付 けてェラ゜゚ンルトにその 旨 を 伝<br />
えるのが Sorry サヴバですが、 任 意 のヤケポンルケをェラ゜゚ンルトに 返 すことができる HTTP::respond コカマンル<br />
ドを 使 用 して Sorry サヴバのかわわりに <strong>BIG</strong>-<strong>IP</strong> 自 身 が sorry コカンルテンルゼを 返 します。<br />
日 本曓 語 の 直 接 入 力 は GUI でのみ 可 能 です。<br />
when HTTP_REQUEST {<br />
# always_down_pool という pool のアクティブメンバ 数 が 0 だったら 以 下 の 処 理 を 行 います<br />
if { [active_members test_pool] < 1 }{<br />
# HTTP 200 とそれに 続 く html テキストをクライアントに 返 します<br />
HTTP::respond 200 Content " 現 在 サーバ 停 止 中 です。もう 暫 くお 待 ちくだ<br />
さい。F5 Networks test"}<br />
}<br />
2. SSL のサ゜ト<br />
サ゜トへモジ゜ヤェト<br />
モジ゜ヤェトするための<br />
Rule<br />
デヴシエャヴハにモジ゜ヤェト 対 象 となる URI を 格 納 しておき、そのオノグェェトへの http ゚ェセコケが 試 み<br />
られたら https にモジ゜ヤェトします。<br />
when HTTP_REQUEST {<br />
set uri [findstr [HTTP::uri] "" 1 "/"]<br />
if {[matchclass $::redirect_group equals $uri]} {<br />
redirect to "https://[HTTP::host][HTTP::uri]"<br />
}<br />
}<br />
ここで 用 意 するデヴシエャヴハは 以 下 のようなものになります。<br />
class redirect_group {<br />
"test1"<br />
"test2"<br />
}<br />
たとえば、ェラ゜゚ンルトが 以 下 のようなモェエケトを 送 信 した 場 合 、<br />
http://www.domain.com/test1/testing/inde.cgi<br />
[HTTP::uri]コカマンルドで 返 される 値 は 以 下 のとおりです。<br />
/test1/testing/index.cgi<br />
上 記 の Rule では、path の 中 のもっとも 上 位 のデ゛ヤェトモの 内 容 に 応 じて(この 例 の 場 合 は/test1)モジ゜ヤ<br />
ェトを 行 うので、[HTTP::uri]で 取 得 できる 値 の 2 文 字 目 から 最暷 初 の”/”の 前 の 文 字 までがマッスンルエの 対 象 と<br />
なります。これを 以 下 の 記 述 で 抜 き 出 します。<br />
findstr [HTTP::uri] "" 1 "/"<br />
更暬 に 以 下 の 記 述 でエャヴハのモケトとマッスさせます。<br />
matchclass $::redirect_group equals $uri<br />
デヴシエャヴハを 使 用 する 際 の 変 数 名 は 以 下 のとおりです。<br />
$:: 設 定 したグループ 名<br />
F5 Networks Japan K.K. 6 July, 2005
TECHNICAL BRIEF<br />
3. Web サヴバが 返 すエラヴコカヴド<br />
エラヴコカヴドを 200 に 変 換 する Rule<br />
web ゚ハモォヴクミンルに 対 する 攻 撃 者 は、HTTP バッジのヤケポンルケコカヴドならびにエラヴ 時昷 のコカンルテンルゼか<br />
ら 得 られる 情 報 (Web サヴバの 種 類 、バヴグミンル 等 )を 攻 撃 の 糸 口 の 1 つとします。 例 えば 403(Forbidden)<br />
や 500(Internal Server Error)であれば、そのオノグェェトに 対 して 何 らかの query string を 付 加 してモェエ<br />
ケトを 送 れば 何 らかのヤケポンルケが 得 られるかもしれないというヒンルトを 与 えるし、そのエラヴ 画 面 のコカンルテ<br />
ンルゼには 多 くの 場 合 web サヴバのバヴグミンルや web サヴバの 名 前 が 含 まれており、これによりそのソサフトウ<br />
ェ゚ 特 有暼 の 既 知 の 脆 弱 性 を 知 ることができます。 一 般 的 な 商 用 サ゜トにおいて、サ゜トの 利 用 者 はヤケポンルケ<br />
コカヴドやサヴバの 種 類 ンバヴグミンルを 知 る 必 要 は 無 く、 主 に 開 発 者 やテケシヴがテケト 環 境 においてのみ 確 認<br />
できれば 良 いので 以 下 の <strong>iRule</strong> によってェラ゜゚ンルトには 全 て 200 を 返 します。<br />
when HTTP_REQUEST {<br />
# リダイレクト 時 の host 名 取 得 は HTTP_REQUEST イベントで 行 わなければなりません<br />
set host [HTTP::host]<br />
}<br />
when HTTP_RESPONSE {<br />
if { [regexp {[45]..} [HTTP::status]] == 1 }{<br />
# 4 あるいは 5 ではじまる 3 桁 のレスポンスコードだったときに、200 のコードおよび 自 動 的 にトップ<br />
ページに 戻 るための HTTP コンテンツを 返 します<br />
HTTP::respond 200 Content " 都 合 によりコンテンツを 表 示 できません。<br />
自 動 的 にトップページに 移 ります。<br />
もし 移 らない 場 合 はブラウザの 戻 るボタンで 前 のページに 戻 ってください。F5 Networks test<br />
"<br />
}<br />
}<br />
正 規 表 現 についての 補 足 :<br />
正 規 表 現<br />
[45]..<br />
は、4 または 5 の 後 に 任 意 の 文 字 (“.”)が 2 個 続 く 文 字 列 にマッスします。<br />
このォヴケにおいては<br />
[45][0-9][0-9]<br />
とも 表 すことができます。<br />
F5 Networks Japan K.K. 7 July, 2005
TECHNICAL BRIEF<br />
4. ェラ゜゚ンルトあたりの<br />
TCP コカネヅェクミンル 数 を 制 限 する Rule<br />
1 ェラ゜゚ンルト(1 ソサヴケ <strong>IP</strong> ゚ドヤケ)が 確 立 できる TCP コカネヅェクミンル 数 を 制 限 します。HTTP1.1 と Keep-Alive<br />
を 使 用 する 場 合 、 一 般 的 に 1 ェラ゜゚ンルトと VS の 間 で 確 立 される TCP セコックミンルはごく 限 られた 数 になるた<br />
め、この <strong>iRule</strong> によってモェエケトが 多 数 送 られるような 攻 撃 を 防 ぎます。<br />
when RULE_INIT {<br />
# Rule 全 体 で 接 続 数 を 管 理 するための 配 列 を 宣 言 します。 添 え 字 はクライアントの <strong>IP</strong> アドレスです<br />
array set ::active_clients { }<br />
}<br />
when CLIENT_ACCEPTED {<br />
set client_ip [<strong>IP</strong>::remote_addr]<br />
# その <strong>IP</strong> アドレスの 添 え 字 を 持 った 要 素 が 存 在 する 場 合 、それ 以 下 の 処 理 を 行 います<br />
if { [info exists ::active_clients($client_ip)] } {<br />
# この 場 合 1<strong>IP</strong> アドレスあたりの 最 大 コネクション 数 は 5 です。 制 限 超 過 分 は 弾 きます<br />
if {$::active_clients($client_ip) > 5 } {<br />
reject<br />
return<br />
} else {<br />
# 制 限 数 に 満 たなければカウントアップします<br />
incr ::active_clients($client_ip)<br />
}<br />
} else {<br />
# 要 素 がまだ 無 ければ 新 規 作 成 します<br />
set ::active_clients($client_ip) 1<br />
}<br />
}<br />
# TCP 接 続 がクローズしたときの 処 理 です<br />
when CLIENT_CLOSED {<br />
if { [info exists ::active_clients($client_ip)] } {<br />
# 配 列 要 素 が 存 在 したら、カウントを 1 下 げます<br />
incr ::active_clients($client_ip) -1<br />
if { $::active_clients($client_ip)
TECHNICAL BRIEF<br />
5. 帯 域 幅 によって 圧 縮 のコカンルトュヴャ<br />
コカンルトュヴャを 行 う Rule<br />
<strong>iRule</strong> の[TCP::bandwidth]コカマンルドを 使 用 するとェラ゜゚ンルトとの 間 で 確 立 されている TCP セコックミンルの 帯<br />
域 幅 [kbps]を 取 得 することができます。この 値 を 使 用 して、ナュヴバンルドのェラ゜゚ンルトに 対 しては 圧 縮 を 提<br />
供 するのがこの Rule です。<br />
when HTTP_RESPONSE {<br />
if { [TCP::bandwidth] < 1000 }{<br />
# 1Mbps 未 満 のときは 高 圧 縮 率<br />
COMPRESS::enable<br />
COMPRESS::gzip level 9<br />
}<br />
elseif { [TCP::bandwidth] < 10000 }{<br />
# 10Mbps 未 満 のときは 低 圧 縮 率<br />
COMPRESS::enable<br />
COMPRESS::gzip level 1<br />
}<br />
else {<br />
# それ 以 上 のときは 圧 縮 しません<br />
COMPRESS::disable<br />
}<br />
}<br />
F5 Networks Japan K.K. 9 July, 2005
TECHNICAL BRIEF<br />
Appendix<br />
I. TCL コカマンルド<br />
1. モケトコカマンルド<br />
モケトを 操 作 するためのコカマンルドです。<strong>iRule</strong> で 使 用 できない、もしくは 使 用 するォヴケが 少 ないコカマンルドは<br />
省 略 しています。<br />
モケトの 結 合<br />
contact $list1 $list2 $list3…<br />
変 数 に 対 してモケト 要 素 の 追 加 し、その 結 果 のモケトを 返 します。<br />
lappend variable $var1 $var2…<br />
モケトから$index 番 目 の 要 素 を 取 り 出 します。<br />
lindex $list $index<br />
モケトの$index 番 目 の 要 素 の 前 に 要 素 $val1, $val2,…を 挿 入 したモケトを 返 します。<br />
linsert $list $index $val1 $val2 …<br />
変 数 群 $val1, $val2…を 要 素 としたモケトを 返 します。<br />
list $val1 $val2 …<br />
モケトの 要 素 数 を 返 します。<br />
llength $list<br />
モケト$list の$index_s 番 目 から$index_e 番 目 までの 要 素 をモケトとして 返 します。<br />
最暷 後 までの 場 合 は$last の 中 身 を 文 字 列 end にします。<br />
lrange $list $index_s $index_e<br />
モケト$list の$s 番 目 から$e 番 目 までの 連 続 した 要 素 をすべての 要 素 $val1, $val2,…で 置 き 換 え、 新 しいモケ<br />
トを 返 します。<br />
lreplace $list $s $e $val1 $val2…<br />
モケト$list から、$sw で 任 意 で 与 えられたパシヴンルマッスンルエ 方 式 で、$pattern に 合 致 する 最暷 初 の 要 素 の゜<br />
ンルデッェケを 返 す。$sw は-glob( 方 式 ) –exact( 完 全 一 致 ) –regexp( 正 表 現 )が 用 意 されている。$sw の 指 定 が 無<br />
いときは blog 方 式 が 使 用 されます。<br />
lsearch $sw $list $pattern<br />
モケト$list の 要 素 をソサヴトしたモケトを 返 します。<br />
lsort $switch –command $ com $direction $list<br />
モケト$list の 要 素 を$joinString で 結 合 した 文 字 列 を 返 します。$joinString のデフォャト 文 字 はケヒヴケで<br />
す。<br />
join $list $joinString<br />
文 字 列 $string を、$splitChars で 区 切 られた 文 字 列 を 要 素 としたモケトを 返 します。<br />
$splitChars のデフォャト 文 字 はケヒヴケです。このコカマンルドは join とは 逆 の 関 係 にあります。<br />
split $string $splitChars<br />
2. 制 御 コカマンルド<br />
if { test1 } {body 1 } elseif { test2 } { body2 } elseif ….. eise { bodyn }<br />
test1 : body1 を 実 行 するための 条曵 件 式 。 真 なら body1 が 実 行 されます。<br />
test2 : test1 の 条曵 件 が 偽 のとき 評 価 される 条曵 件 式 。 真 なら body2 が 実 行 されます。<br />
bodyn : 全 ての 条曵 件 が 偽 のときに 実 行 されます。<br />
F5 Networks Japan K.K. 10 July, 2005
TECHNICAL BRIEF<br />
for { init } { test } { reinit } { body }<br />
init : 初 期曋 設 定 Tcl ケェモハト<br />
test : ャヴハ 条曵 件 式 ( 真 ならャヴハ 継 続 )<br />
reinit : 再 設 定 Tcl ケェモハト<br />
body : Tcl ケェモハト(メベ゜ンル 処 理 )<br />
while { test } { body }<br />
test : 条曵 件 式 ( 真 ならャヴハ 継 続 )<br />
reinit : 再 設 定 Tcl ケェモハト<br />
body : Tcl ケェモハト(メベ゜ンル 処 理 )<br />
switch $switch $ string {$pattern1 {body} …. $pattern {body}}<br />
string をスェッェし、 合 致 した pattern の body を 実 行 。<br />
-glob –exact –regexp のマッスンルエ 方 式 があり、デフォャトは-glob。<br />
foreah $valNameList $list {body}<br />
list から 要 素 を 取 り 出 し、 変 数 valNameList に 順 番 に 代 入 し、body を 実 行 する。<br />
この 処 理 を 要 素 数 の 分 だけ 繰 り 返 す。<br />
break<br />
for while switch foreach のャヴハ 脱 出 に 使 用 する。<br />
continue<br />
for while foreach において、ャヴハの 条曵 件 式 評 価 にグャホンルハする。<br />
eval arg1 arg2 ….<br />
全 ゚ヴギポメベンルトをケヒヴケ 区 切 りで 結 合 し、その 文 字 列 を Tcl ケェモハトとして 実 行 し 結 果 を 返 す。<br />
3. 文 字 列 操 作 コカマンルド<br />
format<br />
scan<br />
regexp<br />
regsub<br />
string compare<br />
string first<br />
string last<br />
string index<br />
string length<br />
string match<br />
string range<br />
string tolower<br />
string toupper<br />
string trim<br />
string trimleft<br />
string trimright<br />
F5 Networks Japan K.K. 11 July, 2005
TECHNICAL BRIEF<br />
II.<br />
<strong>iRule</strong> で 使 用 できないコカマンルド<br />
after<br />
auto_execok<br />
auto_import<br />
auto_load<br />
auto_mkindex<br />
auto_mkindex_old<br />
auto_qualify<br />
auto_reset<br />
bgerror<br />
cd<br />
close<br />
eof<br />
exec<br />
exit<br />
fblocked<br />
fconfigure<br />
fcopy<br />
file<br />
fileevent<br />
filename<br />
flush<br />
gets<br />
glob<br />
http<br />
interp<br />
load<br />
memory<br />
namespace<br />
open<br />
package<br />
pid<br />
pkg::create<br />
pkg_mkIndex<br />
proc<br />
pwd<br />
rename<br />
seek<br />
socket<br />
source<br />
tcl_findLibrary<br />
tell<br />
unknown<br />
update<br />
uplevel<br />
upvar<br />
vwait<br />
F5 Networks Japan K.K. 12 July, 2005