On 19/02/2013 14:37, Pavel Mateja wrote:
Can anyone give any clues as to what might be causing a timeout problem
with mod_proxy being used as a reverse proxy to a local app server. This
is using httpd 2.2.23 on ubuntu 10.04 LTS i686

I've (hopefully) eliminated the network itself as a source of the
problem by testing this with the app server running on the same box as
apache, using 127.0.0.1 as the network address in the proxy config.

Even like this, I still get occasional '(70007)The timeout specified has
expired: proxy: prefetch request body failed to 127.0.0.1:4000
(127.0.0.1)' messages in the logs.

The app server shows the socket accept happening at the point the
request is made, but then just sticks in a select() call until the
timeout occurs (set to 5 seconds). No data is recieved from the apache
mod_proxy.

The apache logs then get the error message shown above added to them.

The connection that mod_proxy is using is plain http, not https. This
seems to happen maybe once or twice a day, no apparent pattern with
system load, client type, url being requested etc.

Is there anywhere that details the different error log messages that
mod_proxy can generate, what they actually mean, and possible causes of
them. I'm not even sure in this case if 'prefetch request body failed'
relates to getting data from the app server or getting it from the web
browser client (the error has 'to 127.0.0.1' in it which makes me think
it relates to getting data from the app server)

Is there any enhanced logging I can add to mod_proxy, for example to
show it making the connection, packets sent, packets recieved etc. I
just can't see why this timeout fails with mod_proxy not sending any
data to the app server. Does mod proxy need the entire request from the
browser before it forwards it on (what about requests with large post
data? - though that is not the case in these errors). Can it have a long
delay between making the connection to the app server and actually
starting to transmit the request?

Thanks for any hints/tips.
Hi,
do you use keepalive in your proxy?
I had so set something like
ProxyTimeout 41
Timeout 40
on proxy and
Timeout 45
on backend because there is tiny race when backend closes connection just in
the moment proxy tries to reuse that connection.

The proxy settings I'm using at the moment are:

ProxyRequests Off
ProxyErrorOverride On
ProxyPreserveHost On
ProxyTimeout 600
ProxyVia Off

<Proxy balancer://appserver>
BalancerMember http://127.0.0.1:4000 loadfactor=1 max=100 disablereuse=On
ProxySet lbmethod=byrequests
</Proxy>

### Normally the balancer has more than one member, distributed over different servers but whilst trying to get to the bottom of this I've set it to just a single instance on the local box.

I've also tried disabling re-use by setting the nokeepalive and 1.0 request options in the <location> section that sets the reverse proxy:

<Location /tools/>
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
ProxyPass balancer://appserver/tools/
</Location>

Using this the proxy does seem to be closing the connection immediately after each request. With the error I received today (the timeout shown above) it was at the start of a new connection, with no existing open connection to apache. The previous request from the same client had been almost 4 minutes earlier.




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@httpd.apache.org
For additional commands, e-mail: users-h...@httpd.apache.org

Reply via email to