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