Le jeudi 16 décembre 2010 06:21:08, Shawn Heisey a écrit :
> On 12/15/2010 9:20 PM, Shawn Heisey wrote:
> > On 12/15/2010 7:50 PM, Cyril Bonté wrote:
> >> This configuration
> >> should work (fixed the acl and merged all the reqirep in the
> > 
> >> frontend) :
> > The things that match /foo* can't use the tomcat backend, they have to
> > use the apache backend.  Everything that doesn't match an ACL uses the
> > tomcat backend, which is not really tomcat, it's still apache - but
> > apache sends it through to tomcat, thus the name.  The /foo* paths are
> > sent to the CGI, hosted by apache.  If we can make it work, I do plan
> > eventually to put the actual tomcat server ports in the tomcat backend.

Yes, this is how this configuration works.

Example :
Incoming request is : GET /fooc/bar HTTP/1.1

=> APPLYING reqirep ^([^\ ]*)\ /fooc/(.*) \1\ /cgi-bin/cgi-
gw.exe?action=capt&fooid=\2

The request becomes : GET /cgi-bin/cgi-gw.exe?action=capt&fooid=bar HTTP/1.1
It won't match the 'fooc' acl anymore but the 'cgi' one will.
And you've got :
     use_backend apache if cgi
which sends the request to the apache backend.

> Perhaps what doesn't work in my first attempt is having more than one
> thing happen if an ACL matches.  To put everything into the frontend, I
> need to use a config like this, to have it both rewrite the request and
> send it to a nondefault backend:
> 
>      reqirep ^([^\ ]*)\ /fooc/(.*) \1\
> /cgi-bin/cgi-gw.exe?action=capt&fooid=\2    if fooc
>      use_backend apache    if fooc
> 
> I'm guessing that it works like a Cisco access-list - the first entry
> that matches determines the outcome, the rest of the entries are
> ignored.  If I'm right, then it would probably work if I put all the
> reqirep statements in the backend, where they wouldn't need acl conditions.

ACL are re-evaluated each time a condition is met. This is why "use_backend 
apache if fooc" can't match after "reqirep" (I missed these lines in your 
first example, sorry).

-- 
Cyril Bonté

Reply via email to