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

Bhupendra's avatar
Bhupendra
Icon for Altocumulus rankAltocumulus
Jun 20, 2023
Solved

irule

I want to put below condition on irule, please help

1. If source IP matches and URI is /A  and /B traffic should be forwarded to POOL A

2. If user is accessing /C-new, rewrite URI to /C and forward to POOL A

3. if not matches 1 and 2 condition defalut POOL B

7 Replies

  • Hi Bhupendra , 
    in Step 2 of rewrite >>> do you need the source ip matches as well or Not ? 

    So you need to match on specific source IP address/address first and then match /A or /B then move traffic to pool A but if the same match on source ip address/addresses but with uri starts with /c-new modify it to be /C and forward traffic to pool A 

    if non of those forward to pool B 

    that's Correct ? 

     

    • Bhupendra's avatar
      Bhupendra
      Icon for Altocumulus rankAltocumulus

      Hi Mohamed_Ahmed_Kansoh 

       

      in Step 2 of rewrite >>> do you need the source ip matches as well or Not ? ------- >>>>No we don't want to match source IP here only URI with any source.

      So you need to match on specific source IP address/address first and then match /A or /B then move traffic to pool A but if the same match on source ip address/addresses but with uri starts with /c-new modify it to be /C and forward traffic to pool A 

      if non of those forward to pool B
      that's Correct ? ----------------->>First condition match on specific source IP address/address first  then match URI /A or /B for selected source IPs then move traffic to pool A

      Second condition -any source with uri starts with /c-new modify it to be /C and forward traffic to pool A

      If no condition match from 1&2 then default traffic should be route POOL B

      • Hi Bhupendra , 

        Use this irule : 

        when HTTP_REQUEST {
            if { ( [IP::addr [IP::client_addr] equals x.x.x.x ] ) and ( ([HTTP::uri] starts_with "/A") or ([HTTP::uri] starts_with "/B" ) ) }{
                
                log local0. " First Condition matched >>>> GO TO POOL A 🙂 "
                pool POOL_A
                
            } elseif { ( [HTTP::uri] starts_with "/C-new" ) }{
            
             HTTP::uri [string map -nocase {"/C-new " "/C"} [HTTP::uri]]
            
               log local0. " 2nd Condition matched (String MAP did it work ) >>>> GO TO POOL A 🙂 "
               pool POOL_A
               
            } else {
            log local0. " 3rd Condition matched ( Default path ) >>>> GO TO POOL B 🙂 "
            return
            }
        }

        Don't forget to assign POOL_B as a default pool in Virtual server resources , to forward traffic in case the last condition ( Default ) triggered. 

        >> Also Make sure that there are no multiple requests are sent for each web page. 

        I mean : 
        if you sent req like this http://10.10.10.10/A by the specified source address it should be forwarded correct to pool_A. 
        But what if at the same time your web page needs multiple requests like http://10.10.10.10/image.php

        so make sure you send only single request per page. 

        Goodluck

  • Maybe think about using a local traffic policy rather than an iRule. It will be more efficient and easier for you to manage