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.

HTTP retry on 404 pre-9.2.0

Problem this snippet solves:

This rule replaces the functionality of LB::reselect and HTTP::retry for pre-9.2.0 boxes. The rule looks to see if the server responds with a 404. If the server's response is a 404 it attaches a cookie and sends to the other server in the pool based upon data in the cookie.

How to use this snippet:

Note: replaced spaces in the cookie value with underscores as cookie values cannot contain spaces.

Code :

when HTTP_REQUEST { 
     set redirectURL [HTTP::host][HTTP::uri] 
     if { not [HTTP::cookie exists retryCookie]  } { 
          set priorServer                "" 
          set priorServerPort      "" 
          set priorTimes                0 
          log local0. "First request" 
     } else { 
        set priorServer           [getfield [HTTP::cookie retryCookie] "_" 1 ] 
        set priorServerPort [getfield [HTTP::cookie retryCookie] "_" 2 ] 
          set priorTimes           [getfield [HTTP::cookie retryCookie] "_" 3 ] 
          if { $priorTimes > 1 } { 
               HTTP::respond 200 content "

file not found

" } elseif { $priorServer equals "10.0.2.10"} { pool test_pool member 10.0.2.10 80 } else { pool test_pool member 10.0.2.11 80 } } } when LB_SELECTED { set poolName [getfield [LB::server] " " 1] set priorServer [getfield [LB::server] " " 2] set priorServerPort [getfield [LB::server] " " 3] } when HTTP_RESPONSE { if { [HTTP::status] starts_with "4" } { if { $priorTimes < 2 } { log local0.info "Status: [HTTP::status] " incr priorTimes log local0.info "Server1 priorTimes after incr: $priorTimes" set tmpCookie "$priorServer_$priorServerPort_$priorTimes" HTTP::cookie insert name retryCookie value $tmpCookie domain [HTTP::host] HTTP::respond 302 Location "http://$redirectURL" set-cookie "retryCookie=$tmpCookie" #HTTP::respond 302 Location "http://$redirectURL" #HTTP::redirect http://$redirectURL } else { HTTP::respond 200 content "

file not found

" } } }
Published Mar 18, 2015
Version 1.0
No CommentsBe the first to comment