Irule not working as expected
I created an irule when CLIENT_ACCEPTED { set default_pool [LB::server pool] }
when HTTP_REQUEST { switch -glob [string tolower [HTTP::uri]] { "/customerdetails" - "/webofferlist" - "/membershipedit *" { pool poolB } default { pool $default_pool } } }
Any traffic with http header with the above string it need to go to pool B , if not the default pool . But all the traffic is just going to the default pool , please help me to get this irule working as expectected.
We are doing ssl offload on f5 and again re-encrypting the data from f5 to the backend servers.
No need for any string command. If you don't want to normalize the case, then:
when HTTP_REQUEST { switch -glob [HTTP::uri] { ... etc ... } }
However, again, you probably want to use HTTP::path, since that's what you're actually matching on. For the case your provide, it would be something like this:
when HTTP_REQUEST { switch -glob [HTTP::path] { "*/MembershipEdit" { pool poolB } } }
For the example URL you provided, what you're trying to match is essentially "if the Target-Request path ends_with /MembershipEdit, then use poolB". With glob matching:
switch [HTTP::path] { "/foo" {...} ; means match if path is exactly /foo "*/foo" {...} ; means match if path ends with /foo "/foo/*" {...} ; means match if path starts with /foo/ "*/foo/*" {...} ; means match if path contains /foo/ }
For what it's worth, I suspect that what you really mean is:
when HTTP_REQUEST { switch -glob [HTTP::path] { "*/CustomerDetails" - "*/WebofferList" - "*/MembershipEdit" { pool poolB } } }
What I mean is, I suspect in all cases you are trying to match something at the end of the path, and since you are not normalizing the case (and generally, not normalizing the case of the path is the correct choice), then you must make sure the case matches.