言語について
Tcl 言語
をベースにしている- コメントアウト記号は
#
iRule イベント
処理のトリガとなるイベント。when XXX {}
の XXX の部分に記述される。
HTTP_REQUEST
- システムが完全なクライアント HTTP リクエストヘッダ(つまり、メソッド、URI、バージョン、および HTTP リクエスト本文を除くすべてのヘッダ)を完全に解析したときにトリガされる iRule イベント
HTTP_RESPONSE
- システムがサーバ応答からのすべての応答ステータスとヘッダー行を解析するときにトリガされる iRule イベント
Priority
- iRule イベントに関連付けられる優先度
- iRules がバーチャルサーバの内部 iRules エンジンにロードされると、イベント名と優先度の組み合わせでテーブルに保存される
- Priority が小さいイベントのコードブロックから順に評価・実行される
- Priority のデフォルトは 500、値範囲は 0〜1000
- Priority が同じ場合は、テーブルに挿入された順序で実行される
- Priority の指定方法は以下の 2 パターンがある
#パターン1
priority nnn
when <event_name> {
...
}
#パターン2
when <event_name> priority nnn {
...
}
参考資料:https://clouddocs.f5.com/api/irules/priority.html
変数
- 事前の変数宣言は必要ない
- 変数への値の代入
set <変数名> <値>
- 変数値の参照
$<変数名>
ローカル変数とグローバル変数
- ローカル変数
- 同一セッション内でのみ値が保持される変数
- 使用方法は上記の通り
- グローバル変数
- すべてのセッションで共通して使用可能な変数
- 使用方法は変数名指定の箇所で
static::<変数名>
と記述する - 基本的には使わない方が良さそう
区切り文字の意味
- 半角スペース
- コマンド、名前、引数、オプションなどの区切り
- 大括弧 [ ]
- ネストされたコマンドは大括弧で区切られる
- 大括弧で囲まれたものはすべてコマンドとして評価される
- 中括弧 { }
- 1 つ以上の要素のスペース区切りリスト
- または 1 つ以上のコマンドの改行区切りリスト
- 小括弧 ( )
- 式の優先順位を明示的に指定したいときに使用
- 配列要素参照時に使用
- 正規表現で使用
- など
算術演算
算術演算(加減乗除など)をするためには、expr
コマンドを使用する必要がある。
- 加算:
expr { A + B }
- 減算:
expr { A - B }
- 乗算:
expr { A * B }
- 除算:
expr { A / B }
比較演算子
- 等しい:
A == B
- 等しくない:
A != B
- 含む:
A contains B
- で始まる:
A starts_with B
- で終わる:
A ends_with B
その他一般的な演算子も使用可能。
比較用コマンド
string equal [-nocase] <string1> <string2>
- string1 と string2 が等しい場合は 1、そうでない場合は 0 を返す
- -nocase オプションを付けると大文字と小文字を区別しない
定数値の取得
- クライアントの IP アドレス
IP::client_addr
- BIG-IP の IP アドレス
IP::local_addr
- BIG-IP のポート
TCP::local_port
- サーバの IP アドレス(BIG-IP での振り分け先)
IP::server_addr
- サーバ側の TCP ポート番号
TCP::server_port
またはTCP::remote_port
- HTTP リクエストの内容
HTTP::host
HTTP::path
HTTP::query
HTTP::uri
HTTP::cookie <オプション>
HTTP::header <オプション>
HTTP::header value <ヘッダ名>
:指定したヘッダの値を取得
HTTP::method
:GET/POST/PUT/DELETE 等HTTP::request
HTTP::version
- HTTP ステータスコード
HTTP::status
HTTP 操作
HTTP ヘッダ操作
HTTP::header remove <ヘッダ名>
- 指定したヘッダの削除
HTTP::header insert <ヘッダ名> <値>
- 指定したヘッダの挿入
参考資料:https://clouddocs.f5.com/api/irules/HTTP__header.html
HTTP パスの書き換え
HTTP::path <パス>
参考資料:https://clouddocs.f5.com/api/irules/HTTP__path.html
HTTP レスポンスの生成
以下コマンドでクライアントへの HTTP レスポンスを生成可能。
HTTP::respond <ステータスコード> [<オプション>]
ステータスコード 403 として接続を閉じる場合は以下のように記述。
HTTP::respond 403 noserver Connection "close"
参考資料:https://clouddocs.f5.com/api/irules/HTTP__respond.html
サーバプールの設定
pool <プール名>
参考資料:https://clouddocs.f5.com/api/irules/pool.html
Syslog 操作
◆高速ログ通信のバンドルを開く(Syslog サーバ指定)
HSL::open -publisher <publisher>
- System > Logs > Configuration > Log Publishers で設定されたログパブリッシャーの高速ログ通信のハンドルを開いて返す
<publisher>
の部分は「/Common/<Log Publisher 設定名>
」の形で記述するset <変数> HSL::open ...
の形で記述し、戻り値であるハンドルを変数に格納して使用する
◆ 指定データを高速ログで送信(ログ送信)
HSL::send <handle> <data>
<handle>
にはHSL::open
の戻り値を格納した変数を指定<data>
の部分にログとして送信する文字列を指定する
- 参考資料:
文字列置換
regsub
正規表現によるパターンマッチにより文字列を置換。
regsub [-nocase|-all] <string1> <string2> <string3> <変数>
- string1:置換対象の正規表現パターン
- string2:置換操作を行う対象文字列
- string3:string1 にマッチした部分をこの文字列に置き換える
- 変数:置換した結果の文字列が格納される変数
- 戻り値は置換した文字列の数
- -nocase オプションを付けると大文字と小文字を区別しない
- -all オプションを付けると正規表現に一致した箇所すべてを置換。指定しない場合、最初の一箇所のみ置換
set url http://nwengblog.com/piyo/index.html
regsub -all {http://|/index.html} $url {} result
→ 2
set result
→ nwengblog.com/piyo
- 参考資料:
その他
- 現在時刻の取得
clock clicks
:CPU のクロックティック単位のカウント値clock clicks -milliseconds
:ミリ秒単位のカウント値
- 文字列の小文字を大文字に変換
string toupper <string>
- URL エンコード(パーセントエンコーディング)する
URI::decode <uri>
参考資料
iRules Home
Tag: "series-irules-getting-started" - DevCentral
Weareanonlinecommunityoftechnicalpeersdedicatedtolearning,exchangingideas,andsolvingproblems-together.
もっとTcl/Tk