Forum Discussion
17 Replies
- nitassEmployee
e.g.
Virtual server with multiple pools - distribute based on browser types
- mbamusa_59409Nimbostratusthank you for your reply . i created the following (can we combine the first 3 conditions in 1 using OR). when HTTP_REQUEST { if {[string tolower [HTTP::header User-Agent]] contains "msie6" }{ pool Pool1 } elseif {[string tolower [HTTP::header User-Agent]] contains "msie7" }{ pool Pool } elseif {[string tolower [HTTP::header User-Agent]] contains "msie8" }{ pool Pool1 }else { pool Pool2 } }
- nitassEmployeeyou can use "or" e.g. if { [...] or [...] or [...] } {
- mbamusa_59409Nimbostratuswill this work ? when HTTP_REQUEST { if {[string tolower [HTTP::header User-Agent]] contains "msie6" or "msie7" or "msie8"}{ pool Pool1 }else { pool Pool2 } }
- nitass_89166Noctilucent
e.g.
Virtual server with multiple pools - distribute based on browser types
- mbamusa_59409Nimbostratusthank you for your reply . i created the following (can we combine the first 3 conditions in 1 using OR). when HTTP_REQUEST { if {[string tolower [HTTP::header User-Agent]] contains "msie6" }{ pool Pool1 } elseif {[string tolower [HTTP::header User-Agent]] contains "msie7" }{ pool Pool } elseif {[string tolower [HTTP::header User-Agent]] contains "msie8" }{ pool Pool1 }else { pool Pool2 } }
- nitass_89166Noctilucentyou can use "or" e.g. if { [...] or [...] or [...] } {
- mbamusa_59409Nimbostratuswill this work ? when HTTP_REQUEST { if {[string tolower [HTTP::header User-Agent]] contains "msie6" or "msie7" or "msie8"}{ pool Pool1 }else { pool Pool2 } }
- Kevin_StewartEmployee
Try:
when CLIENT_ACCEPTED { set default_pool [LB::server pool] } when HTTP_REQUEST { if { [string tolower [HTTP::header User-Agent]] contains "blah" } { pool ms_pool } else { pool $default_pool } }
Change "blah" to a unique value in the IE User-Agent header, and change ms_pool to the name if your MS pool.
- nitass_89166Noctilucent
will this work ? when HTTP_REQUEST { if {[string tolower [HTTP::header User-Agent]] contains "msie6" or "msie7" or "msie8"}{ pool Pool1 }else { pool Pool2 } }
you have to repeat [string tolower [HTTP::header User-Agent]] (or set it to variable first and re-use it later) in if-condition.
e.g.
set uagent [string tolower [HTTP::header User-Agent]] if { $uagent contains "msie6" or $uagent contains "msie7" or $uagent contains "msie8"} {
or you may use switch instead of if-condition.
e.g.
[root@ve11a:Active:Not All Devices Synced] config tmsh list ltm rule myrule ltm rule myrule { when HTTP_REQUEST { switch -glob [HTTP::header value "User-Agent"] { "*MSIE 6*" - "*MSIE 7*" - "*MSIE 8*" { pool qux } default { pool [LB::server pool] } } } }
- mbamusa_59409NimbostratusThank you Nitass , is the below OK ? set uagent [string tolower [HTTP::header User-Agent]] if { $uagent contains "msie6" or $uagent contains "msie7" or $uagent contains "msie8"}{ pool Pool1 } else { pool Pool2 } }
- nitass_89166Noctilucentit looks okay to me.
- Colin_Walker_12Historic F5 AccountThat looks logically sound to me, but you might want to think about using a switch statement, as nitass showed above, if you start expanding it to include any more options for User-Agent. The or conditional forces iRules to effectively run multiple if comparisons, one for each or clause, and after a handful of those you'll start seeing switch perform more efficiently. Not to mention switch is way prettier to look at, and we all like pretty code, right? Right. Colin
- nitassEmployee
will this work ? when HTTP_REQUEST { if {[string tolower [HTTP::header User-Agent]] contains "msie6" or "msie7" or "msie8"}{ pool Pool1 }else { pool Pool2 } }
you have to repeat [string tolower [HTTP::header User-Agent]] (or set it to variable first and re-use it later) in if-condition.
e.g.
set uagent [string tolower [HTTP::header User-Agent]] if { $uagent contains "msie6" or $uagent contains "msie7" or $uagent contains "msie8"} {
or you may use switch instead of if-condition.
e.g.
[root@ve11a:Active:Not All Devices Synced] config tmsh list ltm rule myrule ltm rule myrule { when HTTP_REQUEST { switch -glob [HTTP::header value "User-Agent"] { "*MSIE 6*" - "*MSIE 7*" - "*MSIE 8*" { pool qux } default { pool [LB::server pool] } } } }
- mbamusa_59409NimbostratusThank you Nitass , is the below OK ? set uagent [string tolower [HTTP::header User-Agent]] if { $uagent contains "msie6" or $uagent contains "msie7" or $uagent contains "msie8"}{ pool Pool1 } else { pool Pool2 } }
- nitassEmployeeit looks okay to me.
- Colin_Walker_12Historic F5 AccountThat looks logically sound to me, but you might want to think about using a switch statement, as nitass showed above, if you start expanding it to include any more options for User-Agent. The or conditional forces iRules to effectively run multiple if comparisons, one for each or clause, and after a handful of those you'll start seeing switch perform more efficiently. Not to mention switch is way prettier to look at, and we all like pretty code, right? Right. Colin