Keep URL after rewriting

Hauke mailman at haukebruno.de
Wed May 8 10:43:01 CEST 2013


Hi Raul,

thanks for your advices.

for wordpress I configured the Site-URL to www.example.com/corporate. That will 
fix my hyperlinks.

But now I have the following problem:

As shown in the config

if (req.http.host ~ "example.com" && req.url ~ "^/corporate") {
    set req.http.host = "corporate-stag.example.local";
    set req.url = regsub(req.url, "corporate", "");
  }

I remove the _corporate_ part in req.url. That's because the webapp lies 
directly under the DocumentRoot of _corporate-stag.example.local_. If I click 
some hyperlink in the webapp like _http://www.example.com/corporate/foo.php_ 
this does not work because of removing the _corporate_ from the req.url.

Is there any other option for my case except of moving the whole webapp from 
DocumentRoot to DocumentRoot/corporate and don't delete the _corporate_ part 
in req.url? I tried this and this will work, but it's a little bit messy at 
all.

Thanks,


-- 
Best regards,
Hauke
On Tuesday, May 07, 2013 07:12:49 AM Rangel, Raul wrote:
> I'm going to make the assumption that your webapp is writing absolute urls.
> I'm also going to make the assumption that it is using the Host header to
> write those urls. This is why your gusts never navigate back to the same
> domain. I see two potential options.
> 
> 1) Configure your webapp not to write full urls.
> 2) Some web frameworks support the X-Forwarded-Host header. So you could set
> that header before you do any manipulations to it. i.e)
> set req.http.X-Forwarded-Host = req.http.host;
> 
> Raul
> 
> -----Original Message-----
> From: varnish-misc-bounces at varnish-cache.org
> [mailto:varnish-misc-bounces at varnish-cache.org] On Behalf Of Hauke Sent:
> Tuesday, May 07, 2013 6:25 AM
> To: varnish-misc at varnish-cache.org
> Subject: Keep URL after rewriting
> 
> Hi there,
> 
> i think I've got a fallacy at the moment.
> 
> After rewriting my URLs with Varnish I want to keep the origin URL given by
> a client.
> 
> We want to use our domain with some followed seperators, e.g.
> www.example.com/corporate should point to a specific webapp,
> www.example.com/service should point to another webapp and so on.
> 
> The backend servers listen to some internal names like corporate-
> stag.example.local.
> 
> Here is my current Varnish config:
> 
> backend web1 {
>   .host="10.7.138.21";
>   .probe = {
>                 .url = "/";
>                 .interval = 5s;
>                 .timeout = 1 s;
>                 .window = 5;
>                 .threshold = 3;
>   }
> }
> 
> backend web2 {
>   .host="10.7.136.61";
>   .probe = {
>                 .url = "/";
>                 .interval = 5s;
>                 .timeout = 1 s;
>                 .window = 5;
>                 .threshold = 3;
>   }
> }
> 
> director example round-robin {
>   {
>     .backend = web1;
>   }
>   {
>     .backend = web2;
>   }
> }
> 
> sub vcl_recv {
>   set req.backend = example;
>   set req.http.host = regsub(req.http.host, "^www\.", "");
> 
>   if (req.http.host ~ "example.com" && req.url ~ "^/corporate") {
>     set req.http.host = "corporate-stag.example.local";
>     set req.url = regsub(req.url, "corporate", "");
>   }
> 
>   if (req.http.host ~ "example.com" && req.url ~ "^/service") {
>     set req.http.host = "service-stag.example.local";
>     set req.url = regsub(req.url, "service", "");
>   }
> }
> 
> If I hit _www.example.com/corporate_ in my browser, I get the correct
> webapp. But if I navigate, the hyperlinks are all pointed to _corporate-
> stag.example.local_ and they never pass Varnish again.
> 
> Where is my mistake?
> 
> --
> Best regards,
> Hauke
> 
> _______________________________________________
> varnish-misc mailing list
> varnish-misc at varnish-cache.org
> https://www.varnish-cache.org/lists/mailman/listinfo/varnish-misc



More information about the varnish-misc mailing list