This is what I have done as an example solution, although I do NOT like it. I do nothing in Request rules for this, but I set up a Response rule like this: if ( http.getResponseCode ( ) >= 400 && request.isResendable ( ) && request.getRetries ( ) < 1 ) { $redoNodeAddr = string.split ( connection.getNode ( ) , ":" ) [ 0 ] ; $redoNodePort = string.split ( connection.getNode ( ) , ":" ) [ 1 ] ; log.warn ( "Resending to node " . $redoNodeAddr . ":" . $redoNodePort ) ; http.setHeader ( "Host" , $redoNodeAddr ) ; pool.select ( connection.getPool() , $redoNodeAddr , $redoNodePort ) ; request.retry ( ) ; } I need to set the trafficscript!variable_pool_use global setting. The effect is that an initial request is sent to the pool with the load-balancing decision made, my backend reverse proxies respond with an error status code, this rule adjusts the request to inject the Host header of the initially selected node and resends to that node using the same pool settings, the request is resent to the backend reverse proxy which is now happy with the request. It works and might be using load-balancing decisions reasonably, but it obviously sucks because of the duplicate request, and only works with re-sendable requests.
... View more