http-redirectvarnish-4

Varnish direct request to internal ip


I have an hash configuration like this

sub vcl_init {
    new bar = directors.hash();
    bar.add_backend(server1, 1.0);
    bar.add_backend(server2, 1.0);
}

I would like to add a rewrite rule that if in the url there is a word it must redirect to one specific internal server

if (req.url ~ "/newsletter" ) {
   set req.http.x-redir = "https://" + "10.1.3.4" + req.url;
   return (synth (301, req.http.x-redir));
}

But this rule doesn't work because 10.1.3.4 is an internal ip not a DNS. Is it possible to do this?


Solution

  • Seems like you want to use a different director backend (the internal server) if the request contains newsletter. Thats possible.

    Example

    sub vcl_recv {
        if (req.url ~ "^/newsletter") {
            set req.backend = newsletter;
        } else {
            set req.backend = default.
        }
    }
    

    See https://varnish-cache.org/docs/3.0/tutorial/advanced_backend_servers.html

    But you cant do a 301, thats for the external request, while here we are talking internal routing.