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.0David_Homoney Nimbostratus
Nimbostratus
Joined November 10, 2004
David_Homoney Nimbostratus
Nimbostratus
Joined November 10, 2004
No CommentsBe the first to comment