For more information regarding the security incident at F5, the actions we are taking to address it, and our ongoing efforts to protect our customers, click here.

Forum Discussion

jgranieri's avatar
jgranieri
Icon for Nimbostratus rankNimbostratus
Jan 20, 2012

Help with logic on header check irule

Hello All,

 

 

So i have an irule in which I need to check http header for mozilla then check the URI then LB appropriately. after this condition I have 2 other URI that are from a browser and need to be LB appropriately.

 

 

 

So If /aaa does not come from mozilla send to pool aaa, otherwise send to zzzz

 

 

/bbb and /ccc are browser based and need to go to the respective pools.

 

 

I know I have the default pool at the end but i need to somehow that with an else after the

 

 

"*/aaa*" { pool aaa }

 

{else}

 

pool zzz}

 

 

/bbb and /ccc are browser based and will contain mozilla in the header field

 

 

when HTTP_REQUEST {

 

if { not [string tolower [HTTP::header Accept]] contains "Mozilla" } {

 

switch -glob [HTTP::host][HTTP::uri] {

 

"*/aaa*" { pool aaa }

 

"*/bbb*" { pool bbb }

 

"*/ccc*" { pool ccc }

 

default {

 

pool zzz }

 

}

 

}

 

}

 

 

 

 

3 Replies

  • OK, so you seem to be saying that /aaa is a special treatment compared to /bbb and /ccc? in which case, I think you're describing this:

    when HTTP_REQUEST { 
       switch -glob [HTTP::uri] { 
          "/aaa*" { 
             if { not [string tolower [HTTP::header "User-Agent"]] contains "mozilla" } { 
                pool aaa 
             } else { 
                pool zzz 
             } 
          } 
          "/bbb*" { pool bbb } 
          "/ccc*" { pool ccc } 
       } 
    } 

    Is that what you mean? You mention needing a default, yet your description doesn't seem to want one at all. Can you clarify?

    So a few things I'd point out...

    1) You're using [HTTP:host] and then completely ignoring it. Also introducing potential vagueness into the switch - your logic would match, host.com/ccc/aaa/blahblahblah as "/aaa", which is surely not what you want.

    2) You're using the Accept header, when you surely mean the User-Agent header?

    [EDIT: s/mozilla/Mozilla/ as per Hoolio's comment below ]
  • hoolio's avatar
    hoolio
    Icon for Cirrostratus rankCirrostratus
    Good points Chris. Also, if you're setting the User-Agent header to lowercase make sure the string you're comparing it with is lower case, like "mozilla".

     

     

    Aaron
  • @ Chris - Yes I need /aaa to be lb based on header field detection I will try your changes.

     

     

    @ Aaron thanks as well

     

     

    I am going to try this to see if I can get this to work.