Forum Discussion
4 Replies
- Stanislas_Piro2Cumulonimbus
Hi,
a HTTP request received by LTM is:
GET /foo/ HTTP/1.1 Host: abc.com:port (if port is not default one) User-Agent: user agent string other headers...
the default behavior of LTM when load balancing requests is to change both destination IP and port without changing anything in the request.
Do you want to rewrite Host header with the pool member ip address and port instead of VS fqdn and port?
Hi Ferhat,
as Stanislas already explained your LTM would already take care of the load balancing decission, based on available pool members and the configured load balancing lalgorythm. So no need to use iRules for that...
To change the HOST headers value to reflect the selected node IP and also port number you may use this rather simple iRule...
when HTTP_REQUEST_SEND { HTTP::host "[IP::server_addr]:[TCP::server_port]" }
... or if using multiple route domains...
when HTTP_REQUEST_SEND { HTTP::host "[getfield [IP::server_addr] "%" 1]:[TCP::server_port]" }
The outlined iRule will be triggered on each HTTP request right before sending the request to the real server and simply changes to HOST header value to the IP and Port of the selected server.
Cheers, Kai
Hi,
I would apply the header insertion in the context of LB_SELECTED. The iRule below shows another option to insert real hostname to be retrieved from an array:when RULE_INIT { array set static::node_hostname { 10.131.131.63 host1.lb-net.bit 10.131.131.64 host2.lb-net.bit } } when LB_SELECTED { if {[HTTP::header exists Host]} { HTTP::header replace Host [getfield [array get static::node_hostname [LB::server addr]] " " 2] HTTP::header replace Host "[LB::server addr]:[LB::server port]" } else { HTTP::header insert Host "[LB::server addr]:[LB::server port]" } }
Be aware, that servers may send absolute redirects containing the hostname they received in the clients request which may not be resolved by the client.
So perhaps you will need some additional iRule logic to rewrite redirects and the payload containing references. Thanks, Stephan- Fereda_187281Nimbostratus
Thank you for your all answers. sometimes you need to think simple. that link "https://devcentral.f5.com/wiki/irules.http_request_send.ashx" is enough for me. So my case is resolve with that irule.
Have a nice days with f5:) .Thanks