Internal redirecition with dynamic backend (fetch 302 and return content)

Augustin Amann augustin at waw.com
Wed Apr 22 11:44:43 CEST 2009


Kristian Lyngstol a écrit :
> On Wed, Apr 22, 2009 at 08:41:58AM +0200, Augustin Amann wrote:
>   
>> 1) RP do GET to the backend
>> 2) backend reply a 302 to another server
>> 3) RP do a GET to this new location
>> 4) RP return content and store it.
>>
>> Maybe i can use restart, like [1].
>> I have no idea where the new location (gived by 302) is, this could be a 
>> problem for a reverse proxy !
>> So I think it's not realy the varnish way to deal with "dynamic 
>> backend", but vcl is powerfull,
>> and if I can define backend host and url on the fly, it could save my day !
>>     
>
> In vcl_fetch:
>
> if (obj.status == 302) {
> 	set req.url = obj.http.Location;
> 	restart;
> }
>
> The normal routines in vcl_recv will have to determine which backend to use
> based on the new req.url. This will have to be pre-defined backends, so no
> random redirects I'm afraid.
>
>   
Hi Kristian,
Thank you for your reponse. That's what I supected ...

For my needs, I combined squid to varnish, like this:

# Varnish VCL:

backend squid {
        .host = "127.0.0.1";
        .port = "3128";
}

sub vcl_fetch {
        if (obj.status == 302 || obj.status == 301) {
                #set req.backend = squid;
                set req.url = obj.http.Location;
                restart;
        }
}

# squid.conf
http_port 3128 transparent

It works like a charm ... :)

    Best Regards,
     
    Augustin.




More information about the varnish-misc mailing list