You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by Usha Nayak <us...@gmail.com> on 2021/10/13 14:21:22 UTC

[users@httpd] timeout and keepalive parameter in ProxyPass

Hello

Need help in understanding the highlighted parameters:

ProxyPass "/example" "http://backend.example.com"  timeout=3600 keepalive=On

keepalive parameter - As I understand relates to TCP or socket keep alive
probes that are sent to prevent idle connection.

[image: image.png]


My confusion is :

Assuming the backend server takes 4 hrs to process a request and I have
'keepalive on' in Apache httpd with the OS setting to send tcp probes every
2 minutes. Backend server and Apache httpd are sending TCP keep alive
packets to indicate the socket connection is not idle.


   -  In this case, would the 'apache httpd' close the connection in 1 hr (
   timeout = 3600) because the 'apache httpd' didn't get the http data? Is
   this timeout  'apache httpd' application timeout ?


Appreciate help.

Thanks.

Re: [users@httpd] timeout and keepalive parameter in ProxyPass

Posted by Yann Ylavic <yl...@gmail.com>.
On Wed, Oct 13, 2021 at 4:22 PM Usha Nayak <us...@gmail.com> wrote:
>
> Need help in understanding the highlighted parameters:
>
> ProxyPass "/example" "http://backend.example.com"  timeout=3600 keepalive=On
>
> keepalive parameter - As I understand relates to TCP or socket keep alive probes that are sent to prevent idle connection.
>
> My confusion is :
>
> Assuming the backend server takes 4 hrs to process a request and I have 'keepalive on' in Apache httpd with the OS setting to send tcp probes every 2 minutes. Backend server and Apache httpd are sending TCP keep alive packets to indicate the socket connection is not idle.
>
>  In this case, would the 'apache httpd' close the connection in 1 hr ( timeout = 3600) because the 'apache httpd' didn't get the http data?

Yes, the timeout= parameter sets the inactivity timeout for the
backend connection. If reading from or writing to this connection
takes more time than the timeout= va
lue then the connection is forcibly closed and an error (504) is
returned to the client.

The keepalive= parameter is to enable the TCP keepalive mechanism on
the connection at the operating system level (SO_KEEPALIVE socket
option).
As you noted it consists of periodic TCP probes sent by the OS on the
connection to prevent intermediaries/routers/firewalls from closing it
due to their own TCP inactivity timeout, and also to detect whether
the peer is still connected (by acking the probes). The settings for
the probes period, ack timeout and number of retries happen at the OS
level for all the connections, that's why keepalive= is a simple
on/off.

Note that the ProxyPass keepalive= parameter must not be confused with
the "KeepAlive on/off" directive pertaining to the client connection.
The KeepAlive and KeepAliveTimeout directives are about the lifetime
of the client connection in between HTTP transactions. Once a request
has been handled and a response was sent to the client the
KeepAliveTimeout is the time to wait for the next request on the same
connection (if "KeepAlive off" the connection is closed immediately
and thus each connection handles a single request/response only).

FWIW, here is the correspondence between the client side and backend
side settings regarding timeout and keepalive:

Client side:              Proxy/Backend side:
  Timeout N           <=>   timeout=N
  KeepAlive On/Off    <=>   enablereuse=On/Off
  KeepAliveTimeout N  <=>   ttl=N
  [*Always On*]       <=>   keepalive=On/Off

Hope that helps..


Regards;
Yann.

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


[users@httpd] RE: [EXTERNAL] Re: [users@httpd] timeout and keepalive parameter in ProxyPass

Posted by "Orendt, John" <jo...@medtronic.com.INVALID>.
Hi

I use a different approach to these types of requests.

The back end request immediately returns a status message ”Request Received”

On Subsequent Requests returns a status message ”Working”

Finally, Subsequent Request returns a status message ”Ready” with results.

John Orendt
John.p.orendt@medtronic.com

From: Usha Nayak <us...@gmail.com>
Sent: Tuesday, October 19, 2021 10:37 AM
To: users@httpd.apache.org
Subject: [EXTERNAL] Re: [users@httpd] timeout and keepalive parameter in ProxyPass

Hello

Thank you for your response. However, I'm still a bit fuzzy when it comes to the keepalive and timeout attribute.

I understand keepalive=On attribute by itself but in combination with timeout is where I'm unclear.

In the scenario that I presented with following:

  *    timeout=3600 keepalive=On attributes
  *    backend server taking a long time processing the request sent by client ( note: no streaming any data from server yet since it's busy processing the request, let's say processing time on server is 4 hrs )
  *    OS settings are set to send TCP Keep alive packet in every 2 mins

My guess:

  *   With TCP keep alive probes sent and ACK between 'Apache httpd' machine and 'Backend server' machine, we can be assured that there's no inactive or idle TCP connection.
  *   But, from the 'Apache Httpd' application point of view, it hasn't received the data from the server in 1 hr(3600), and therefore 'Apache Httpd' will initiate a timeout. When the 'Backend Server' is ready in 4 hrs to stream the response back, there's no ' Apache Httpd' client to receive the response.
Please do correct me if I'm thinking this incorrectly,

Appreciate all the help

Thanks.


On Wed, Oct 13, 2021 at 10:03 AM Dino Ciuffetti <di...@tuxweb.it>> wrote:
The global "Timeout" parameter is needed to set the length of time Apache httpd will wait for I/O in various circumstances.
https://httpd.apache.org/docs/2.4/mod/core.html#timeout<https://urldefense.com/v3/__https:/httpd.apache.org/docs/2.4/mod/core.html*timeout__;Iw!!NFcUtLLUcw!DmkJVqMAt4NaSGwLZq93nIthjgNb1gK5MwyqdCke2kFmEvHGUM062jIb-qTQ7np89F8i_g$>


The "keepalive" attribute of ProxyPass can be used to fool your network equipments (like intermediate firewalls) to mantain the tcp connection between apache and its backends open even when no data is passing from and to the wires. Some network equipment like firewalls tend to drop inactive (silent) connections too early (from my experience ~30 min but your mileage may vary).

The "timeout" attribute of ProxyPass is the number of seconds Apache httpd waits for data sent by / to the backend. So in your case apache will close a inactive connection with the backend in 1hr, but while your backend continue to stream data the connection will be kept open. Yes, it's a sort of application timeout.

There is also the "connectiontimeout" attribute of ProxyPass that will consider a new TCP connection with the backend not valid if it takes the specified time to complete (TCP SYN + SYN/ACK + ACK) so it can be retried earlier.




13 ottobre 2021 16:22, "Usha Nayak" <ushanay@gmail.com<mailto:ushanay@gmail.com?to=%22Usha%20Nayak%22%20%3Cushanay@gmail.com%3E>> wrote:
Hello
Need help in understanding the highlighted parameters:
ProxyPass "/example" "http://backend.example.com<https://urldefense.com/v3/__http:/backend.example.com__;!!NFcUtLLUcw!DmkJVqMAt4NaSGwLZq93nIthjgNb1gK5MwyqdCke2kFmEvHGUM062jIb-qTQ7npt-Xfx7Q$>" timeout=3600 keepalive=On
keepalive parameter - As I understand relates to TCP or socket keep alive probes that are sent to prevent idle connection.
[cid:image001.png@01D7C4D6.CF3A0310]
My confusion is :
Assuming the backend server takes 4 hrs to process a request and I have 'keepalive on' in Apache httpd with the OS setting to send tcp probes every 2 minutes. Backend server and Apache httpd are sending TCP keep alive packets to indicate the socket connection is not idle.

  *   In this case, would the 'apache httpd' close the connection in 1 hr ( timeout = 3600) because the 'apache httpd' didn't get the http data? Is this timeout 'apache httpd' application timeout ?
Appreciate help.
Thanks.

[CONFIDENTIALITY AND PRIVACY NOTICE] Information transmitted by this email is proprietary to Medtronic and is intended for use only by the individual or entity to which it is addressed, and may contain information that is private, privileged, confidential or exempt from disclosure under applicable law. If you are not the intended recipient or it appears that this mail has been forwarded to you without proper authority, you are notified that any use or dissemination of this information in any manner is strictly prohibited. In such cases, please delete this mail from your records. To view this notice in other languages you can either select the following link or manually copy and paste the link into the address bar of a web browser: http://emaildisclaimer.medtronic.com

Re: [users@httpd] timeout and keepalive parameter in ProxyPass

Posted by Usha Nayak <us...@gmail.com>.
Hello

Thank you for your response. However, I'm still a bit fuzzy when it comes
to the keepalive and timeout attribute.

I understand keepalive=On attribute by itself but in combination with
timeout is where I'm unclear.

In the scenario that I presented with following:

   -  timeout=3600 keepalive=On attributes
   -  backend server taking a long time processing the request sent by
   client ( note: no streaming any data from server yet since it's busy
   processing the request, let's say processing time on server is 4 hrs )
   -  OS settings are set to send TCP Keep alive packet in every 2 mins


My guess:

   - With TCP keep alive probes sent and ACK between 'Apache httpd' machine
   and 'Backend server' machine, we can be assured that there's no inactive or
   idle TCP connection.
   - But, from the 'Apache Httpd' application point of view, it hasn't
   received the data from the server in 1 hr(3600), and therefore 'Apache
   Httpd' will initiate a timeout. When the 'Backend Server' is ready in 4 hrs
   to stream the response back, there's no ' Apache Httpd' client to receive
   the response.

Please do correct me if I'm thinking this incorrectly,

Appreciate all the help

Thanks.


On Wed, Oct 13, 2021 at 10:03 AM Dino Ciuffetti <di...@tuxweb.it> wrote:

> The global "Timeout" parameter is needed to set the length of time Apache
> httpd will wait for I/O in various circumstances.
> https://httpd.apache.org/docs/2.4/mod/core.html#timeout
>
>
> The "keepalive" attribute of ProxyPass can be used to fool your network
> equipments (like intermediate firewalls) to mantain the tcp connection
> between apache and its backends open even when no data is passing from and
> to the wires. Some network equipment like firewalls tend to drop inactive
> (silent) connections too early (from my experience ~30 min but your mileage
> may vary).
>
> The "timeout" attribute of ProxyPass is the number of seconds Apache httpd
> waits for data sent by / to the backend. So in your case apache will close
> a inactive connection with the backend in 1hr, but while your backend
> continue to stream data the connection will be kept open. Yes, it's a sort
> of application timeout.
>
> There is also the "connectiontimeout" attribute of ProxyPass that will
> consider a new TCP connection with the backend not valid if it takes the
> specified time to complete (TCP SYN + SYN/ACK + ACK) so it can be retried
> earlier.
>
>
>
>
> 13 ottobre 2021 16:22, "Usha Nayak" <ushanay@gmail.com
> <ushanay@gmail.com?to=%22Usha%20Nayak%22%20%3Cushanay@gmail.com%3E>>
> wrote:
>
> Hello
> Need help in understanding the highlighted parameters:
> ProxyPass "/example" "http://backend.example.com" timeout=3600
> keepalive=On
> keepalive parameter - As I understand relates to TCP or socket keep alive
> probes that are sent to prevent idle connection.
> [image: image.png]
> My confusion is :
>
> Assuming the backend server takes 4 hrs to process a request and I have
> 'keepalive on' in Apache httpd with the OS setting to send tcp probes every
> 2 minutes. Backend server and Apache httpd are sending TCP keep alive
> packets to indicate the socket connection is not idle.
>
>
>    - In this case, would the 'apache httpd' close the connection in 1 hr
>    ( timeout = 3600) because the 'apache httpd' didn't get the http data? Is
>    this timeout 'apache httpd' application timeout ?
>
> Appreciate help.
> Thanks.
>
>
>
>

Re: [users@httpd] timeout and keepalive parameter in ProxyPass

Posted by Dino Ciuffetti <di...@tuxweb.it>.
The global "Timeout" parameter is needed to set the length of time Apache httpd will wait for I/O in various circumstances.
https://httpd.apache.org/docs/2.4/mod/core.html#timeout (https://httpd.apache.org/docs/2.4/mod/core.html#timeout)
The "keepalive" attribute of ProxyPass can be used to fool your network equipments (like intermediate firewalls) to mantain the tcp connection between apache and its backends open even when no data is passing from and to the wires. Some network equipment like firewalls tend to drop inactive (silent) connections too early (from my experience ~30 min but your mileage may vary).

The "timeout" attribute of ProxyPass is the number of seconds Apache httpd waits for data sent by / to the backend. So in your case apache will close a inactive connection with the backend in 1hr, but while your backend continue to stream data the connection will be kept open. Yes, it's a sort of application timeout.

There is also the "connectiontimeout" attribute of ProxyPass that will consider a new TCP connection with the backend not valid if it takes the specified time to complete (TCP SYN + SYN/ACK + ACK) so it can be retried earlier.
13 ottobre 2021 16:22, "Usha Nayak" <ushanay@gmail.com (mailto:ushanay@gmail.com?to=%22Usha%20Nayak%22%20<us...@gmail.com>)> wrote:
Hello

Need help in understanding the highlighted parameters:

ProxyPass "/example" "http://backend.example.com (http://backend.example.com)"  timeout=3600 keepalive=On

keepalive parameter - As I understand relates to TCP or socket keep alive probes that are sent to prevent idle connection.
My confusion is :
Assuming the backend server takes 4 hrs to process a request and I have 'keepalive on' in Apache httpd with the OS setting to send tcp probes every 2 minutes. Backend server and Apache httpd are sending TCP keep alive packets to indicate the socket connection is not idle.
	* In this case, would the 'apache httpd' close the connection in 1 hr ( timeout = 3600) because the 'apache httpd' didn't get the http data? Is this timeout 'apache httpd' application timeout ?
Appreciate help.

Thanks.