Using a Selector

Jeremy James jbj at
Tue Dec 11 17:56:58 UTC 2007

J Davis wrote:
> I'm trying to configure both a reverse_proxy service and a web server
> service on the same perlbal instance.
> I want to use URL matching to determine which URL's get served by the
> reverse_proxy and which get served by the web_server.
> By looking at the documentation and some example configurations I can
> see that this type of setup probably involves creating a selector
> service and by digging through the mail archives I found a link to a "
> <>" plugin but I can't find any
> documentation on how to configure perlbal to tie all of this together.

Urlmatch (as hosted on is largely deprecated
by the official Vpath(s) plugin included in 1.60 - I believe it offers
the same functionality (although uses a straightforward regexp matching
instead of my slightly funky apache-style url matching).

> Below is a partial example of how I think this might work but I don't
> have any idea how to tell urlmatch how to work.
> Any pointers or examples would be greatly appreciated.

> ...snip...

You shouldn't normally need to specify a listen address for each
service, unless that's behaviour you explicitly want...

I'd imagine something like (not tested!):

-- start of perlbal.conf --

LOAD vpath

# Or move these into a seperate nodelist file
CREATE POOL apache_backends
  POOL apache_backends ADD
  POOL apache_backends ADD
  POOL apache_backends ADD

CREATE SERVICE apache_proxy
  SET role            = reverse_proxy
  SET pool            = apache_backend
  SET persist_backend = on
  SET verify_backend  = on
ENABLED apache_proxy

CREATE SERVICE local_images
  SET role            = web_server
  SET docroot         = /var/imageroot/
  SET dirindexing     = 0
ENABLE local_images

CREATE SERVICE mainselector
  SET listen          =
  SET role            = selector
  SET plugins         = vhost

  VPATH /images/.*    = local_images
  VPATH .*            = apache_proxy
ENABLE mainselector

-- end of perlbal.conf --

Note that images would be served from the docroot, ie. you are accessing
files under a directory at /var/imageroot/images/ - perhaps a update to
vpath will allow chopping prefixes off URLs? (hint hint)

Also, note that you can't officially have multiple selectors chained
together (ie. a vhost selector going on to a vpath selector). However, I
have a posted a patch to this list that allows you to do this (dated
25th April '07 with the title 'Patches: Chained Selectors and Multiple
Listen'). We have been using this on a medium-loaded server since
posting that without issues.

Best wishes,

More information about the perlbal mailing list