Tested, and very nice; that works! Thanks so much!
Phillip On Sat, Jul 11, 2015 at 2:20 AM, Willy Tarreau <[email protected]> wrote: > Hi, > > On Fri, Jul 10, 2015 at 04:32:38PM -0400, Phillip Decker wrote: > > Hello again, > > > > I was migrating a setup from the older style acl-based host to backend > > mapping, to the newer map-based approach, e.g. > > > > use_backend %[req.hdr(host),lower,map_beg(mapping.conf,default)] > > > > and that works fine. But now I'm tempted to simply name the backends > after > > each servername, (eg. 'mail' from mail.google.com, or 'maps' from > > maps.google.com). > > > > Which in my imagination would look something like: > > > > use_backend %[req.hdr_beg(host),lower] > > > > But is there a way to substring or regex off the front of the host > string, > > and pass that to the use_backend call? > > > > In other words, continuing the google.com example, if people are hitting > > the server with "host: mail.google.com", and maps.google.com, and just > for > > completeness, notes.books.google.com, I'd like to have backends: > > > > backend mail > > mode http > > foo > > .... > > > > backend maps > > mode http > > bar > > ... > > > > backend notes.books > > mode http > > baz > > .. > > > > Is there a way to accomplish this without building them into a mapped > file > > in 1.5.x? > > > > (1.6 solutions are okay too, but won't be able to move to that until it's > > in stable.) > > In 1.6 there's the "word" converter which stops at the first delimiter, > so that if you use "word(1,.)" on "notes.books.domain.com", it will return > "notes". From what I understand, in your specific case it does not > perfectly > respond to your needs but for many other cases that could be fine. Also it > makes sense to use it to cut the hostname only and ignore the port. > > Otherwise there's the "regsub" converter, to which you pass a regex, a > substitute string, and optionally some flags. There are some limitations > such as the fact that the comma character cannot be used there due to a > limitation in the config language which uses it as an argument delimiter, > but for a domain it's not a problem. > > Thus a fairly complete solution to your need above could look like this : > > use_backend %[req.hdr(host),word(1,:),lower,regsub(\.domain\.com$,)] > > By replacing ".domain.com" at the end of the name with an empty string, > it will then return "maps", "mail", "notes.book" in your example above. > > Regards, > Willy > >

