うまいぼうぶろぐ

linuxとhttpdとperlのメモ

big-ip irule でURL Routingしているときの謎の仕様

謎の仕様というかほぼbugかな。

前提

pool を2つ容易

  • pool
    • pool1 default pool
    • pool2 特定URLを処理するpool
      • /hoge/ or /fuga/ からはじまるURL
    • pool1、pool2 ともにcookie persistence を有効
  • virtual server
    • default pool にはpool1 を適用
    • HTTP Profile を適用

irule

when HTTP_REQUEST {
  if { [HTTP::path] starts_with "/hoge/" } {
    pool pool2
  }
  elseif { [HTTP::path] starts_with "/fuga/" } {
    pool pool2
  }
}

確認した動作

よし、オッケーと思っていた。

謎の挙動

curl では再現せず、ブラウザによるアクセスで発生。
pool2 で処理するURLにアクセスして、同一ブラウザで数秒以内 (3秒ぐらい?) に
pool1 で処理するURLにアクセスすると、なぜかpool2 に振られる。


## 解決
irule に明示的にdefaultのpoolを書いたら発生しなくなった。
これが仕様らしい。

when HTTP_REQUEST {
  if { [HTTP::path] starts_with "/hoge/" } {
    pool pool2
  }
  elseif { [HTTP::path] starts_with "/fuga/" } {
    pool pool2
  }
  else {
    pool pool1
  }
}