6

I have three servers in the backend, with a round robin director.

I would like varnish to write a X-Server-By header with the name or ip of the server from which the response was fetched, how can this be done?

4 Answers 4

12

In Varnish 3.0.2 I use:

sub vcl_fetch {
    set beresp.http.X-Backend = beresp.backend.name;
}

Works perfectly.

1
  • 2
    For Varnish 4, vcl_fetch has been renamed vcl_backend_response. Otherwise this works there too.
    – Pete
    Jul 31, 2014 at 21:50
4
sub vcl_fetch {
    set obj.http.X-Backend = req.backend;
}

Tested on 2.0.6 in my (non round robin) setup. It should give you something to go on.

3
  • 1
    that just displays the backend id, not the individual server
    – hoberion
    Nov 2, 2010 at 11:26
  • In Varnish 3+ this should be: set beresp.http.X-Backend = req.backend;, however it will still only report the backend's id so it will not be that useful with round-robin backends. Jul 4, 2012 at 13:39
  • This is not the way to do it. Set the header on the backend.
    – Pax
    Jul 11, 2012 at 19:13
3

You can set the header on your web server eg x-host: server2 and then varnish will return that as part of the response to a cache hit.

I have this working on apache and it works perfectly.

1
  • Do it this way, trying to set the header in Varnish doesn't make sense. Set it at the backend itself and Varnish will pass it on to the client.
    – Pax
    Jul 11, 2012 at 19:11
-1

The following is not tested, but might get you started:

sub vcl_deliver {
    set resp.http.X-Served-By = server.hostname;
    deliver;
}
1
  • that gives you the name of het varnish server
    – hoberion
    Nov 2, 2010 at 11:35

You must log in to answer this question.