Hi all,

I am currently trying to understand the different timout parameters a bit 
better and how they interact.  We are using apache httpd 2.4 mod_proxy on a 
centos system as a reverse proxy with mod_proxy_balancer.

Here is the relevant section from our setup:

Define CONNECTION_OPTIONS "min=10 max=500 smax=30 acquire=5000 
connectiontimeout=5 disablereuse=off keepalive=off timeout=29 ttl=10 retry=60"
        <Proxy balancer://balancer location/>
                BalancerMember https://Server1/   ${CONNECTION_OPTIONS}
                BalancerMember https:// Server2/  ${CONNECTION_OPTIONS} 
status=+H
                ProxySet lbmethod=bytraffic
        </Proxy>

What I am trying to understand is how the different timeout parameters interact 
and at what time a request might have been sent to the backend.

Can you confirm/correct the following understanding and answer the questions?

Acquire:
Acquire timeout is a timeout send to the client if the connection pool is very 
busy and apache did not even start to process the request. If this timeout 
happens the request did not reach the proxy and I can be sure no request is 
sent to the backend. In this case, the client will receive an http 503. Should 
I see these kind of requests within the access log of the proxy virtual host?

Connectiontimeout:
Connectiontimeout is a timeout that happens during handshake between the apache 
proxy and the backend. As we are using SSL between the proxy and the backend 
this can happen during SSL Handshake. If this timeout occurs the request was 
trying to be processed by the proxy and will appear in the access log with an 
http code of 504. If this timeout occurs, then I can be sure that the request 
has not been sent to the backend. Can any other http code occur from time 
timeout and is there even a small chance that we might have send the request to 
the backend?

ProxyTimeout and timeout:
Timeout and proxy timeout will both occur only if a successful connection to 
the backend was established and if the request has been sent to the backend. 
Hence I should the see request in both logfiles. If the server does not respond 
within the time defined in this timeout I would expect an http 502 to be 
created. Is this correct? The Part I would like to understand is: does the 
timeout include the acquire time and connection time or is it independent?
Let's take an example: If it takes 4 seconds to acquire a connection and 
another 4 seconds to connect to the backend will the will the client see a 
timout after 29 seconds (timeout includes acquire and connection)  will the 
client see a timeout after 33 seconds (timout does nto include acquire time but 
toes include connection time) or will the client see a timeout after 37 seconds 
(timeout will only start to after the request was send).

Is there any reason to set the proxytimeout to another value than the timeout?

One related question: We are currently logging the http codes using "%>s" from 
my understanding this is the http code we are sending in the response to the 
client. Is this correct and is there a way to also log the http code we have 
received from the backend we are proxying to? I would expect the http code from 
the backend to be empty if a timeout occurs in our systems

Thanks in advance

Chris



Reply via email to