23.12.2014 Views

BIG-IP v9 iRule AtoZ

BIG-IP v9 iRule AtoZ

BIG-IP v9 iRule AtoZ

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!