Hi Willy,

On Sat, Jul 10, 2010 at 09:37:19AM +0200, Willy Tarreau wrote:
> Hi Jeremy,
> 
> On Fri, Jul 09, 2010 at 03:55:53PM -0600, Jeremy Hinegardner wrote:
> > I just want to make sure that this is the expected behavior:
> > 
> >     [r...@tt3 ~]# haproxy -v
> >     HA-Proxy version 1.4.8 2010/06/16
> > 
> > And the snippet of a config showing the behavior.  If the response from
> > the server is a 404, we want to change the status to 555.  If the status
> > is 555 add a Location header:
> > 
> >     frontend  main *:80
> >         default_backend             site1
> > 
> >     backend site1
> >         acl not_found               status 404
> >         acl bizzare_status          status 555
> > 
> >         rspadd  X-Wibble:\ bizzare                          if 
> > bizzare_status
> >         rspadd  X-Wibble:\ not_found                        if not_found
> > 
> >         rsprep ^HTTP/1.1\ 404\ (.*)$ HTTP/1.1\ 555\ Bizzare if not_found
> > 
> > 
> >         server      site1 127.0.0.1:81 check
> > 
> > Curl session against a haproxy with the above config:
> > 
> >     % curl --verbose --silent http://tt3/foo.html > /dev/null
> >     * About to connect() to tt3 port 80 (#0)
> >     *   Trying 10.10.12.17... connected
> >     * Connected to tt3 (10.10.12.17) port 80 (#0)
> >     > GET /foo.html HTTP/1.1
> >     > User-Agent: curl/7.20.0 (i386-apple-darwin10.3.0) libcurl/7.20.0 
> > OpenSSL/0.9.8n zlib/1.2.5 libidn/1.18
> >     > Host: tt3
> >     > Accept: */*
> >     > 
> >     < HTTP/1.1 555 Bizzare
> >     < Server: nginx/0.6.39
> >     < Date: Fri, 09 Jul 2010 21:36:54 GMT
> >     < Content-Type: text/html
> >     < Content-Length: 3653
> >     < Connection: close
> >     < X-Wibble: bizzare
> >     < 
> >     { [data not shown]
> >     * Closing connection #0
> > 
> > What this appears to show, is that both of the status based ACL's are
> > satisfied at different times.  That is, it appears that the following 
> > happens:
> > 
> >   - request sent to site1 and site1 response with a 404
> >   - at this point acl 'not_found' is true, which means that
> >     acl 'bizzare_status' must be false
> >   - rsprep changes the 404 response to a 555
> >   - rspadd adds 'X-Wibble: bizzare' header, which means that
> >     acl 'bizzare_status' was true
> > 
> > I'm okay with this, and can work with it.  I just want to make sure that 
> > this
> > is the expected behavior.
> 
> 
> Yes, I confirm this is how it works. reqadd/rspadd are processed last.
> That's the reason I'd like to add "inbound" and "outbound" processing,
> it would somewhat help for such border cases.
> 

Thanks, this is good to know

-jeremy
-- 
========================================================================
 Jeremy Hinegardner                              [email protected] 


Reply via email to