Forum Discussion
Jace_45978
Nimbostratus
Jun 19, 2009CSS to F5 iRule redirect to pool question.
have a CSS that we are moving away from and going to F5 v9.4.7
The CSS has two VIPs same IP and port one is a default url "*" goes to server A and the other is url "/battery/*" goes to service B
I am thinking that I create a standard port 80 VIP with default pool A and attach irule that sends /battery/ request to pool B
when HTTP_REQUEST {
if {[HTTP::uri] contains {/battery/}}
{pool B}
}
}
is there a better way to right this or will this even work?
Thanks in advance.
here is sample from CSS:
content blah-80
vip address 1.1.1.1
add service serverA
protocol tcp
port 80
url "/*"
active
content blah-battery-80
vip address 1.1.1.1
add service serverB
protocol tcp
port 80
url "/battery/*"
active
5 Replies
- James_Quinby_46Historic F5 AccountThat should work fine, with a slight adjustment for correct syntax and a bit of string normalization:
when HTTP_REQUEST { if { [string tolower [HTTP::uri]] contains "battery"} { pool apache_pool } }
There's a bit more elaboration on the 'contains' bit here:
http://devcentral.f5.com/Wiki/default.aspx/iRules.contains - Jace_45978
Nimbostratus
will give this a try. The string tolower.. is tolower just part of string rule? not familiar with that term. - James_Quinby_46Historic F5 Account'string' is a TCL command, and there are bunch of interesting things you can do with it. There's a great rundown of some of them here:
http://devcentral.f5.com/Default.aspx?tabid=63&articleType=ArticleView&articleId=338
In the rule above, we just want to cover the possibility that someone will be looking for /BATTERY/ and get them to the right place. - hoolio
Cirrostratus
"/battery/*" would match a path starting with /battery/, so you could use [HTTP::path] starts_with "/battery/" for the same functionality. If the web app is not case sensitive, you could set the path to lowercase before checking that it starts with /battery/ as jquinby suggested.
If you're on 9.4.0 or higher, you could also use an HTTP class instead of an iRule to filter requests based on URI to a specific pool.
Aaron - Jace_45978
Nimbostratus
Thanks for all the info..
I used the:
when HTTP_REQUEST {
if { [string tolower [HTTP::uri]] contains "battery"} {
pool battery_pool
}
}
which worked.
9.4.7 is the code running on the BigIP
I like the idea of HTTPClass profile for this instance, however I had tried HTTPClass profile on a previous conversion. It was using a header list and didn't work, dropped in iRule for the header and it worked. So.....not so sure about the HTTPClass, but I won't give up on it yet.
Thanks for all your input. Glad this site exists and you all are very responsive!!
Recent Discussions
Related Content
DevCentral Quicklinks
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
Discover DevCentral Connects