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