big-ip irule memo
httpとhttpsのpoolをひとつのiruleで処理する
例えば
example.com-http
example.com-https
のようなpoolがある場合
CLIENT_ACCEPTEDではTCP::local_portでportが判別できるので
when CLIENT_ACCEPTED { switch -exact [TCP::local_port] { 80 { set pool_service "http" } 443 { set pool_service "https" } } set pool_prefix "example.com-" if ( # 何か条件分岐 ) { pool $pool_prefix$pool_service } }
とすればiruleまとめられる
- irule
pool hogehoge-pool
などを書いた場合、そのpoolが存在していないと構文エラーとなり
iruleを保存できない
ただし、変数などを定義して
set hogehoge "hogehoge-pool" pool $hogehoge
とした場合はiruleは保存できるか、そのiruleが実行された際にエラーとなり、
iruleはそこで中断する。
set hogehoge "hogehoge-pool" if { [HTTP::uri] starts_with "/hoge/" } { pool $hogehoge log local0.info "wryyyyyyyy" }
hogehoge-poolがない場合、pool $hogehoge の時点でエラーになるため、
log local0.info は実行されずログにwryyyyyyyと出ない。
HTTP_RESPONSE
HTTP::redirect でredirectする場合は
HTTP::header insertなどを書いても無視される
irule の処理を終わらせる
1つのirule内の処理を終える場合
return
iruleが複数ファイルに分かれている場合に、
同じeventの処理を終える場合
event disable
例えば
virtualserverに
- irule1
- irule2
が適用されていて、HTTP_REQUESTで書かれているとする。
普通に適用すると、irule1の内容のあと、irule2も評価されるけど、
特定の条件があった場合には、irule1でHTTP_REQUESTを終えたい場合、
irule1内にevent disable
と書く