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