httpのプロファイルでsorryに飛ばす方法はあるけど、いろんなサーバで使いまわしてるプロファイルなのでiruleでできないか試してみた。設定は簡単で、後述のiruleファイルをVirtualServerに適用するだけ。
設定の前に
- 要件
- どのサーバへのアクセスに対しても、接続不可の際に同じsorryコンテンツを表示
- sorryコンテンツを表示した際にURLは元のサーバ表記のまま
- 補足
- sorryサーバ側で表示するコンテンツは同じものという前提があったので、sorryサーバのvirtualhostは一つでいい。(というか数百URLへの対応なので、これ以外嫌って拒否った)
- 顧客のURL表示を変えたくなかったため、リダイレクトではなく別のpoolへ飛ばすという手法を選んだ。よってsorryサーバが同一のBIG-IP配下内にいない場合はこの手法は使えない。
iruleの内容
when HTTP_REQUEST {
if {[active_members [LB::server pool]] < 1 } {
pool sorry.piteki.com-http
}
}
赤字の部分に飛ばし先であるsorryサーバ用のpool名を記載
終わりに
今回この設定をしててオモシロイこと(?)に気づいた。VirtualServerは割り当ててるPoolのメンバーが全て死んだとき、「Offline」(赤色のひし形)になるが、iruleの中で参照しているpoolが生きている場合には「Offiline」にはならず、「Available」(緑色のマル)のままだった。ぱっと見でステータス状態がVirtualServerではわからないので、この仕様はどうなのかなーっていう気はしたが、まぁ考えても仕方ない。仕様なのだから。
コメント