Hello,

Check that Cherrypy is serving up valid HTTP. You could also try setting 
HAProxy to balance in TCP mode instead of HTTP mode, though if this helps it 
would just be masking any problem that might exist.

I once had a backend "500" response translated to 502 by HAProxy balancing in 
HTTP mode. I wrote 500 in quotes because the backend (Apache improperly 
configured in my case) served up an HTML document containing the words "500 
internal server error", but didn't actually serve up any HTTP headers prior to 
the document - just the document itself. HAProxy then changed the response to a 
502, as it should, because not including headers is obviously invalid HTTP. I 
was totally stumped until I ran tcpdump and saw what was happening.

Your setup is different than mine was, of course. But maybe this will give you 
a lead...

Hope this helps,
Bryan

-----Original Message-----
From: Sachin Shetty [mailto:sshe...@egnyte.com] 
Sent: Monday, June 13, 2011 11:12 AM
To: haproxy@formilux.org
Subject: Re: Apache translates 500 to 502 from haproxy

Willy Tarreau <w <at> 1wt.eu> writes:

> 
> On Fri, Jun 10, 2011 at 04:41:08PM +0530, Manoj Kumar wrote:
> > Hi,
> > 
> > We are forwarding specific requests from apache to haproxy which 
> > interbally forwards it to a pool of cherry py servers. We have seen 
> > that certain requests end up in 500 in haproxy and cherry py logs 
> > which is ok and understood, but apache instead sends a 502 to the client.
> 
> Maybe for any reason apache is rejecting the response and aborting the 
> connection, which might explain that message in your logs :
> 
> > [Fri Jun 10 00:46:01 2011] [error] (103)Software caused connection
> > abort: proxy: pass request body failed to 192.168.2.100:9910 
> > <http://192.168.2.15:9910/>  (192.168.2.15)
> 
> Willy
> 
> 


Hi Willy,

I spent some more time looking in to this, notice the error in apache log, it 
is parsing request body and not response

I think this is what is gong on:

1. Apache receives a POST request
2. Forwards to haproxy
3. haproxy forwards to Cherrypy
4. Cherrypy aborts the request due to some internal error, returns 401/500 5. 
haproxy sends the response back to Apache and terminates the connection 6. 
Apache however is still expecting somebody will read the posted response and 
barfs with pass request body failed error

Now this is definitely due to haproxy, since if I skip haproxy and make Apache 
hit cherrypy directly, I see a proper response code from Apache. I think 
haproxy is terminating the connection prematurely when the backend server 
returns and error status code


Any idea?




Reply via email to