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