Hi Sachin, On Sat, Dec 15, 2018 at 10:32:21PM +0530, Sachin Shetty wrote: > Hi, > > We have a tricky requirement to set a different header value in the request > based on which server in a backend is picked. > > backend pod0 > ... > server server1 server1:6180 check > server server2 server2:6180 check > server server3 server3:6180 check > > so when request is forwarded to server1 - I want to inject an header > "X-Some-Header: Server1", "X-Some-Header: Server2" for server 2 and so > on.
You have this with "http-send-name-header", you need to pass it the header field name and it will fill the value with the server's name. It will even support redispatch by rewinding the stream and rewriting the value (which made it very tricky and infamous for quite some time). > If it possible to register some lua action that would inject the header > based on the server selected before the request is forwarded to the server. In fact except for the directive above it's not possible to perform changes after the server has been selected, because the server is selected when trying to connect, which happens after the contents are being forwarded, thus you can't perform any processing anymore. There is quite some ugly code to support http-send-name-header and it cannot be generalized at all. Just to give you an idea, think that a hash-based LB algo (balance uri, balance hdr) could decide to use some contents you're about to modify... So the contents have to be fixed before the server is chosen. Cheers, Willy